Visual Studio 2010 selalu menganggap proyek sudah usang, tetapi tidak ada yang berubah


194

Saya memiliki masalah yang sangat mirip dengan yang dijelaskan di sini .

Saya juga memutakhirkan solusi campuran proyek C ++ / CLI dan C # dari Visual Studio 2008 ke Visual Studio 2010. Dan sekarang di Visual Studio 2010 satu proyek C ++ / CLI selalu kedaluwarsa.

Bahkan jika itu telah dikompilasi dan ditautkan tepat sebelum dan F5 dipukul, kotak pesan "Proyek ini ketinggalan zaman. Apakah Anda ingin membangunnya?" muncul. Ini sangat menjengkelkan karena file DLL sangat bertingkat rendah dan memaksa hampir semua proyek solusi untuk membangun kembali.

Pengaturan pdb saya disetel ke nilai default ( solusi yang disarankan untuk masalah ini ).

Apakah mungkin mendapatkan alasan mengapa Visual Studio 2010 memaksa membangun kembali atau menganggap suatu proyek sudah mutakhir?

Ada ide lain mengapa Visual Studio 2010 berperilaku seperti itu?



Jawaban:


224

Hanya untuk Visual Studio / Express 2010. Lihat jawaban (lebih mudah) lainnya untuk VS2012, VS2013, dll

Untuk menemukan file yang hilang , gunakan info dari artikel Aktifkan C ++ log sistem proyek untuk mengaktifkan debug logging di Visual Studio dan biarkan hanya memberi tahu Anda apa yang menyebabkan pembangunan kembali:

  1. Buka devenv.exe.configfile (ditemukan dalam %ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\atau dalam %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\). Untuk versi Express file konfigurasi diberi nama V*Express.exe.config.
  2. Tambahkan berikut ini setelah </configSections>baris:

    <system.diagnostics>
      <switches>
        <add name="CPS" value="4" />
      </switches>
    </system.diagnostics>
    
  3. Mulai ulang Visual Studio
  4. Buka DbgView dan pastikan itu menangkap keluaran debug
  5. Coba debug (tekan F5 di Visual Studio)
  6. Cari log debug untuk setiap baris formulir:

    Informasi devenv.exe: 0: Proyek 'Bla \ Bla \ Dummy.vcxproj' tidak mutakhir karena membangun masukan 'Bla \ Bla \ SomeFile.h' tidak ada.

    (Saya baru saja menekan Ctrl + F dan mencari not up to date) Ini akan menjadi referensi yang menyebabkan proyek menjadi "ketinggalan zaman".

Untuk memperbaikinya, hapus referensi apa pun ke file yang hilang dari proyek Anda, atau perbarui referensi untuk menunjukkan lokasi sebenarnya.

Catatan: Jika menggunakan 2012 atau lebih baru maka snippet seharusnya:

<system.diagnostics>
  <switches>
   <add name="CPS" value="Verbose" />
  </switches>
</system.diagnostics>

4
> Buka DbgView dan pastikan itu menangkap keluaran debug. Bagaimana cara memastikan bahwa penangkapan dimulai? Saya memiliki masalah yang sama dengan membangun kembali proyek. Tetapi tidak ada info apa pun di DebugView. Saya mengaktifkan 5 opsi pertama di menu 'Capture' dari DebugView. (Dan terima kasih atas tautan yang baik sebagai jawaban!)
sergtk

3
Ini membantu kami mengetahuinya; namun, kami juga harus menghapus direktori build perantara kami sebelum referensi .H terakhir hilang - mungkin untuk menyegarkan StdAfx.obj? Lagi pula, setelah menghapus semua folder build menengah dan membersihkan file proyek, kami juga siap melakukannya.
Membantu

2
Terima kasih - sekarang mengapa itu tidak ada di jendela output biasa?
Martin Beckett

4
Jika Anda menggunakan VS2012, ada cuplikan yang sedikit berbeda untuk ditempelkan ke file konfigurasi. Ini ditautkan dari artikel asli, tetapi untuk berjaga-jaga: Aktifkan C ++ dan sistem proyek Javascript melacak VS2012
rmaVT

3
FYI, ini tampaknya tidak berfungsi lagi di VS2013 - setelah mengedit file konfigurasi, itu tidak menghasilkan apa pun yang menarik di DebugView.
Nathan Reed

166

Di Visual Studio 2012 saya bisa mencapai hasil yang sama lebih mudah daripada di solusi yang diterima.

Saya mengubah opsi di menu AlatPilihanProyek dan SolusiBangun dan Jalankan → * Proyek MSBuild membangun verbositas keluaran "dari Minimal ke Diagnostic .

Kemudian pada output build saya menemukan baris yang sama dengan mencari "tidak up to date":

Proyek 'blabla' tidak mutakhir. Item proyek 'c: \ foo \ bar.xml' memiliki atribut 'Salin ke Direktori Output' disetel ke 'Salin selalu'.


6
Ini juga berfungsi di VS2013, di mana tweak file konfigurasi sepertinya tidak berfungsi lagi.
Nathan Reed

1
Ini bekerja sangat baik untuk saya. Ternyata saya punya referensi melingkar (project1 -> project2, project2 -> project1.dll), yang menyebabkan sebagian besar solusi untuk membangun setiap kali. Bahkan tidak digunakan.
Kobi

7
Dengan C #, saya tidak dapat menemukan apa pun dengan "tidak terkini", kata ajaibnya tampaknya "lebih baru daripada"
Pete

3
1>Project not up to date because build input 'C:\...\ReadMe.txt' is missing.: O !!?!
jozxyqk

3
Dalam VS2013 Anda mungkin juga harus mencari was modified atdalam mode diagnostik karena saya tidak punya not up to datekeluaran.
jaba

59

Ini terjadi pada saya hari ini. Saya dapat melacak penyebabnya: Proyek ini menyertakan file header yang tidak lagi ada di disk.

Menghapus file dari proyek menyelesaikan masalah.


2
Tidak, saya tidak memiliki file header yang tidak ada pada disk. Tetapi bagaimana Anda bisa melacak penyebabnya? Bagaimana Anda mengetahui bahwa ada file yang hilang? Mungkin saya bisa mencari tahu lebih banyak tentang masalah saya dengan memeriksa dengan cara yang sama seperti Anda.
Chris U

1
Ada solusi berbeda ketika ini terjadi pada saya. Mungkin sangat tidak jelas, tetapi saya mengkompilasi proyek dari satu komputer, kemudian yang lain, dan menemukan bahwa saya secara tidak sengaja mengatur waktu ke AM di satu komputer dan PM di yang lain. Perbedaan waktu yang drastis menyebabkan salah satu komputer selalu mengkompilasi semuanya, atau tidak pernah mengkompilasi apa pun bahkan ketika saya memodifikasi file sumber.
Kyle

1
Ini berhasil bagi saya meskipun ada file header yang ada. Menggunakan jawaban di bawah ini untuk mengaktifkan pencatatan, diperkirakan ada file header yang hilang. Saya menghapus ketergantungannya, menambahkannya kembali, dan membangun kembali minimal berfungsi kembali!
Ed Bayiates

kemiringan jam akan menyebabkan sebagian besar sistem bangun meledak
paulm

15

Kami juga mengalami masalah ini dan menemukan cara mengatasinya.

Masalahnya adalah seperti yang dinyatakan di atas "File tidak lagi ada di disk."

Ini tidak sepenuhnya benar. File memang ada pada disk, tetapi file .VCPROJ merujuk file di tempat lain.

Anda dapat 'menemukan' ini dengan masuk ke "sertakan tampilan file" dan mengklik setiap file sertakan pada gilirannya sampai Anda menemukan yang tidak dapat ditemukan oleh Visual Studio. Anda kemudian MENAMBAH file itu (sebagai item yang ada) dan menghapus referensi yang tidak dapat ditemukan dan semuanya OK.

Pertanyaan yang valid adalah: Bagaimana Visual Studio bahkan membangun jika tidak tahu di mana file yang disertakan?

Kami pikir file .vcproj memiliki beberapa jalur relatif ke file yang menyinggung di suatu tempat yang tidak ditampilkan di Visual Studio GUI, dan ini menjelaskan mengapa proyek benar-benar akan membangun meskipun tampilan pohon dari menyertakan tidak benar.


4
Alasan VC dapat membangun adalah karena mereka adalah file header - dan file header tidak benar-benar dikompilasi. Jika ada file header yang benar-benar digunakan oleh file .C / .CPP, maka dan hanya kemudian akan gagal membangun. Jadi pemeriksa ketergantungan (yang mencari file header) menandai proyek sebagai membutuhkan pembangunan kembali, tetapi kompiler yang sebenarnya (yang mengabaikan daftar file header) dapat berhasil.
Membantu

4
Luar biasa ... ini juga terjadi jika Anda memiliki referensi basi ke file teks (yang BUKAN bahkan bagian dari build tetap bahkan jika memang ada !!) di file .vcxproj Anda. Saya telah menghasilkan proyek dengan wizard, dan itu termasuk file ReadMe.txt, yang saya hapus dari disk, tetapi lupa untuk menghapus dari vcxproj.
DLRdave

Saya tidak dapat menemukan file apa pun yang tidak dapat saya buka (kecuali satu, tetapi itu ada di hard drive. Ia mengatakan sesuatu seperti file semacam itu tidak dapat dibuka di Visual Studio 2010 Express SKU atau sesuatu seperti itu.
Penguin Anonim

2
Apa itu "sertakan tampilan file" dan bagaimana Anda mendapatkannya?
Ben

1
Sertakan Tampilan File mungkin adalah bagian Sertakan File di Solution Explorer.
Jaywalker

12

Jawaban yang diterima membantu saya di jalan yang benar untuk mencari tahu bagaimana menyelesaikan masalah ini untuk proyek yang kacau saya harus mulai bekerja dengan. Namun, saya harus berurusan dengan sejumlah besar header termasuk yang buruk. Dengan output debug verbose, menghapus satu menyebabkan IDE membeku selama 30 detik saat mengeluarkan debug memuntahkan, yang membuat proses berjalan sangat lambat.

Saya menjadi tidak sabar dan menulis skrip Python cepat-dan-kotor untuk memeriksa file proyek (Visual Studio 2010) untuk saya dan menampilkan semua file yang hilang sekaligus, bersama dengan filter tempat mereka berada. Anda dapat menemukannya sebagai Inti di sini: https://gist.github.com/antiuniverse/3825678 (atau garpu ini yang mendukung jalur relatif )

Contoh:

D:\...> check_inc.py sdk/src/game/client/swarm_sdk_client.vcxproj
[Header Files]:
  fx_cs_blood.h   (cstrike\fx_cs_blood.h)
  hud_radar.h   (cstrike\hud_radar.h)
[Game Shared Header Files]:
  basecsgrenade_projectile.h   (..\shared\cstrike\basecsgrenade_projectile.h)
  fx_cs_shared.h   (..\shared\cstrike\fx_cs_shared.h)
  weapon_flashbang.h   (..\shared\cstrike\weapon_flashbang.h)
  weapon_hegrenade.h   (..\shared\cstrike\weapon_hegrenade.h)
  weapon_ifmsteadycam.h   (..\shared\weapon_ifmsteadycam.h)
[Source Files\Swarm\GameUI - Embedded\Base GameUI\Headers]:
  basepaenl.h   (swarm\gameui\basepaenl.h)
  ...

Kode sumber:

#!/c/Python32/python.exe
import sys
import os
import os.path
import xml.etree.ElementTree as ET

ns = '{http://schemas.microsoft.com/developer/msbuild/2003}'

#Works with relative path also
projectFileName = sys.argv[1]

if not os.path.isabs(projectFileName):
   projectFileName = os.path.join(os.getcwd(), projectFileName)

filterTree = ET.parse(projectFileName+".filters")
filterRoot = filterTree.getroot()
filterDict = dict()
missingDict = dict()

for inc in filterRoot.iter(ns+'ClInclude'):
    incFileRel = inc.get('Include')
    incFilter = inc.find(ns+'Filter')
    if incFileRel != None and incFilter != None:
        filterDict[incFileRel] = incFilter.text
        if incFilter.text not in missingDict:
            missingDict[incFilter.text] = []

projTree = ET.parse(projectFileName)
projRoot = projTree.getroot()

for inc in projRoot.iter(ns+'ClInclude'):
    incFileRel = inc.get('Include')
    if incFileRel != None:
        incFile = os.path.abspath(os.path.join(os.path.dirname(projectFileName), incFileRel))
        if not os.path.exists(incFile):
            missingDict[filterDict[incFileRel]].append(incFileRel)

for (missingGroup, missingList) in missingDict.items():
    if len(missingList) > 0:
        print("["+missingGroup+"]:")
        for missing in missingList:
            print("  " + os.path.basename(missing) + "   (" + missing + ")")

Modifikasi kode Anda untuk mendukung jalur relatif. Jangan ragu untuk memperbarui inti Anda dan menghapus tautan ke garpu saya!
ixe013

Ini bekerja dengan baik untuk saya! Penghemat waktu yang luar biasa! Terima kasih! Saya tidak memiliki apapun dalam hasil diagnostik yang memberi tahu saya apa yang salah tetapi utilitas Anda menunjukkan kepada saya!
Ed Bayiates

Garpu lain untuk mengaktifkan dir dan menyebutnya di setiap vcxproj gist.github.com/paulsapps/4992d2d460f4ef44538d62c9e875ca78
paulm

8

Saya telah menghapus cpp dan beberapa file header dari solusi (dan dari disk) tetapi masih memiliki masalah.

Masalahnya, setiap file yang digunakan kompiler masuk dalam file * .tlog di direktori temp Anda. Ketika Anda menghapus file, file * .tlog ini tidak diperbarui. Itu file yang digunakan oleh incremental build untuk memeriksa apakah proyek Anda mutakhir.

Edit file .tlog ini secara manual atau bersihkan proyek Anda dan bangun kembali.


Ini untukku! Saya menghabiskan waktu berjam-jam setelah memperbaiki file yang hilang, MASIH kedaluwarsa, logging menunjukkan hasil yang tidak meyakinkan untuk apa yang hilang. Diperlukan untuk menyingkirkan file-file TLOG itu! Terima kasih!
Ed Bayiates

6

Saya memiliki masalah yang sama, tetapi dalam kasus saya tidak ada file yang hilang, ada kesalahan dalam bagaimana file output pdb didefinisikan: Saya lupa akhiran .pdb (saya menemukan dengan trik debug logging).

Untuk mengatasi masalah yang saya ubah, dalam file vxproj, baris berikut:

<ProgramDataBaseFileName>MyName</ProgramDataBaseFileName>

untuk

<ProgramDataBaseFileName>MyName.pdb</ProgramDataBaseFileName>

6

Saya memiliki masalah ini di VS2013 (Pembaruan 5) dan ada dua alasan untuk itu, keduanya dapat Anda temukan dengan mengaktifkan "Detail" build output di bawah "Tools" -> "Projects and Solutions" -> "Build and Run" .

  1. "Forcing recompile of all source files due to missing PDB "..."
    Ini terjadi ketika Anda menonaktifkan keluaran informasi debug di opsi kompiler Anda (Di bawah Pengaturan proyek: "C / C ++" -> "Format Informasi Debug" ke "Tidak" dan "Linker" -> "Hasilkan Info Debug" ke "Tidak":) . Jika Anda telah meninggalkan "C / C ++" -> "Program Database File Name" di default (yaitu "$ (IntDir) vc $ (PlatformToolsetVersion) .pdb"), VS tidak akan menemukan file karena bug ( https : //connect.microsoft.com/VisualStudio/feedback/details/833494/project-web-debug-information-disabled-always-rebuilds ).
    Untuk memperbaikinya, cukup hapus nama file ke "" (bidang kosong).

  2. "Forcing rebuild of all source files due to a change in the command line since the last build."
    Ini tampaknya juga merupakan bug VS yang dikenal ( https://connect.microsoft.com/VisualStudio/feedback/details/833943/forcing-rebuild-of-all-source-files-due-to-a-change-in- the-command-line-since-the-last-build ) dan tampaknya diperbaiki di versi yang lebih baru (tetapi tidak VS2013). Saya tahu tidak ada solusi, tetapi jika Anda melakukannya, tentu saja, posting di sini.


1
Inilah sebabnya masalah saya. Tidak ada satu pun dari pesan "tidak mutakhir" di mana pesan saya dan butuh selamanya bagi kami untuk melacaknya. Juga menghapus atau mengaturnya ke $ (IntDir) $ (ProjectName) .pdb bekerja untuk kami (pastikan untuk mengubahnya untuk konfigurasi debug dan lepaskan)
John Grabanski

4

Saya tidak tahu apakah ada orang lain yang memiliki masalah yang sama, tetapi properti proyek saya telah "Configuration Properties" -> C/C++ -> "Debug Information Format"diatur ke "Tidak Ada", dan ketika saya mengubahnya kembali ke "Program Database (/ Zi)" default, yang menghentikan proyek dari kompilasi ulang setiap kali .


1
+1 ini berfungsi untuk saya juga, di Visual Studio 2013. Secara khusus, ketika saya beralih kembali ke Tidak ada, itu berfungsi dengan baik lagi juga.
user541686

4

Solusi sederhana lain yang dirujuk oleh Visual Studio Forum .

Mengubah konfigurasi: menu AlatPilihanProyek dan SolusiVC ++ Pengaturan ProyekMode Solusi Explorer untuk Tampilkan semua file .

Kemudian Anda dapat melihat semua file di Solution Explorer.

Temukan file yang ditandai oleh ikon kuning dan hapus dari proyek.

Tidak apa-apa.


4

Visual Studio 2013 - "Memaksa kompilasi ulang semua file sumber karena PDB hilang". Saya mengaktifkan output build terperinci untuk menemukan masalah: Saya mengaktifkan output build "Detail" di bawah "Tools" → "Projects and Solutions" → "Build and Run".

Saya punya beberapa proyek, semua C ++, saya mengatur opsi di bawah pengaturan proyek: (C / C ++ → Format Informasi Debug) ke Program Database (/ Zi) untuk proyek masalah. Namun, ini tidak menghentikan masalah untuk proyek itu. Masalahnya berasal dari salah satu proyek C ++ lainnya dalam solusi.

Saya mengatur semua proyek C ++ ke "Program Database (/ Zi)". Ini memperbaiki masalah.

Sekali lagi, proyek yang melaporkan masalah bukanlah proyek yang bermasalah. Coba atur semua proyek ke "Program Database (/ Zi)" untuk memperbaiki masalah.


VS2015 adalah sama mengenai pengaturan untuk output build verbose
LOAS

3

Saya bertemu masalah ini hari ini, namun itu sedikit berbeda. Saya punya proyek DLL CUDA dalam solusi saya. Mengkompilasi dalam solusi bersih adalah OK, tetapi sebaliknya gagal dan kompiler selalu menganggap proyek CUDA DLL tidak up to date.

Saya mencoba solusinya dari posting ini .

Tetapi tidak ada file header yang hilang dalam solusi saya. Kemudian saya menemukan alasan dalam kasus saya.

Saya telah mengubah Direktori Intermediate proyek sebelumnya, meskipun tidak menimbulkan masalah. Dan sekarang ketika saya mengubah Direktori Intermediate Project CUDA DLL kembali ke $ (Konfigurasi) \, semuanya berfungsi dengan baik lagi.

Saya kira ada beberapa masalah kecil antara Kustomisasi CUDA Build dan Direktori Menengah non-standar.


Menggunakan VS2013 (C #), saya telah bereksperimen dengan menetapkan IntermediateOutputPath. Jika ini menunjuk ke folder pada drive yang berbeda maka solusinya, bangunan tambahan berhenti berfungsi - MSBuild mengeluh bahwa beberapa file sumber selalu kedaluwarsa dengan beberapa file perantara (biasanya PDB). Lihat posting blog saya .
Robert Schmidt

3

Saya memiliki masalah yang sama dan mengikuti instruksi di atas (jawaban yang diterima) untuk mencari file yang hilang, tetapi tidak tanpa menggaruk kepala saya. Berikut ini ringkasan saya tentang apa yang saya lakukan. Agar lebih akurat, ini bukan file yang hilang karena tidak diperlukan oleh proyek untuk membangun (setidaknya dalam kasus saya), tetapi mereka adalah referensi ke file yang tidak ada pada disk yang sebenarnya tidak diperlukan.

Inilah kisah saya:

  1. Di bawah Windows 7 file tersebut berada di %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\%. Ada dua file serupa devenv.exe.config.configdan devenv.exe.config. Anda ingin mengubahnya nanti.

  2. Di bawah Windows 7, Anda tidak memiliki izin untuk mengedit file ini dalam file program. Cukup salin di tempat lain (desktop) ubah dan salin kembali ke lokasi file program.

  3. Saya mencoba mencari cara menghubungkan DebugView ke IDE untuk melihat file yang hilang. Anda tidak perlu melakukan apa pun. Jalankan saja, dan itu akan menangkap semua pesan. Pastikan Capture Eventsopsi menu dipilih dalam Capturemenu yang secara default harus dipilih.

  4. DebugView TIDAK akan menampilkan semua file yang hilang sekaligus (setidaknya bukan untuk saya)! Anda akan menjalankan DebugView dan menjalankan proyek di Visual Studio 2010. Ini akan meminta project out of datepesan, pilih Ya untuk membangun dan DebugView akan menampilkan file pertama yang hilang atau menyebabkan pembangunan kembali. Buka file proyek (bukan file solusi) di Notepad dan cari file itu dan hapus. Anda lebih baik menutup proyek Anda dan membukanya kembali saat melakukan penghapusan ini. Ulangi proses ini sampai DebugView tidak lagi menampilkan file yang hilang.

  5. Agak membantu mengatur filter pesan agar tidak diperbarui dari tombol bilah alat DebugView atau Edit → opsi Filter / Sorot . Dengan begitu, satu-satunya pesan yang ditampilkan adalah pesan yang memiliki string `tidak terkini 'di dalamnya.

Saya punya banyak file yang tidak perlu referensi dan menghapusnya semua memperbaiki masalah mengikuti langkah-langkah di atas.

Cara kedua untuk menemukan semua file yang hilang sekaligus

Ada cara kedua untuk menemukan file-file ini sekaligus, tetapi melibatkan (a) kontrol sumber dan (b) integrasi dengan Visual Studio 2010. Menggunakan Visual Studio 2010 , tambahkan proyek Anda ke lokasi yang diinginkan atau lokasi boneka di sumber. kontrol. Ini akan mencoba untuk menambahkan semua file, termasuk yang tidak ada pada disk juga tetapi dirujuk dalam file proyek. Buka perangkat lunak kontrol sumber Anda seperti Perforce , dan itu harus menandai file-file ini yang tidak ada pada disk dalam skema warna yang berbeda. Perforce menunjukkan mereka dengan kunci hitam. Ini adalah referensi Anda yang hilang. Sekarang Anda memiliki daftar semuanya, dan Anda dapat menghapus semuanya dari file proyek Anda menggunakan Notepad dan proyek Anda tidak akan mengeluh karena ketinggalan zaman .


2

Bagi saya itu adalah keberadaan file header yang tidak ada di "File Header" di dalam proyek. Setelah menghapus entri ini (klik kanan> Kecualikan dari Proyek) pertama kali dikompilasi ulang, lalu langsung

========== Bangun: 0 berhasil, 0 gagal, 5 terbaru, 0 dilewati ==========

dan tidak ada upaya membangun kembali tanpa modifikasi dilakukan. Saya pikir ini adalah check-before-build yang diimplementasikan oleh VS2010 (tidak yakin jika didokumentasikan, bisa jadi) yang memicu bendera "AlwaysCreate".


2

Jika Anda menggunakan perintah MSBuild baris perintah (bukan Visual Studio IDE), misalnya jika Anda menargetkan AppVeyor atau Anda lebih suka baris perintah, Anda bisa menambahkan opsi ini ke baris perintah MSBuild Anda:

/fileLoggerParameters:LogFile=MyLog.log;Append;Verbosity=diagnostic;Encoding=UTF-8

Seperti yang didokumentasikan di sini (peringatan: verbosity MSDN biasa). Ketika build selesai, cari string will be compileddalam file log yang dibuat selama build MyLog.log,.


1
/ verbosity: detail juga akan memberikan informasi yang sama tetapi tidak sebagai verbose. Anda kemudian dapat mencari "akan dikompilasi sebagai".
Shane Gannon

1
Anda juga harus mencari "Sumber kompilasi diperlukan" yang juga akan menemukan tautan
Shane Gannon

2

Saya menggunakan Visual Studio 2013 Professional dengan Pembaruan 4 tetapi tidak menemukan resolusi dengan saran lainnya, namun, saya berhasil menyelesaikan masalah untuk proyek Tim saya.

Inilah yang saya lakukan untuk menyebabkan masalah -

  • Dibuat objek kelas baru (Proyek -> Tambah Kelas)
  • Mengganti nama file melalui Solution Explorer dan mengklik ya ketika ditanya apakah saya ingin secara otomatis mengganti nama semua referensi untuk dicocokkan

Inilah yang saya lakukan untuk menyelesaikan masalah -

  • Buka Beranda Team Explorer
  • Klik Sumber Kontrol Explorer
  • Bor ke folder tempat semua file kelas / proyek berada
  • Menemukan nama file ASLI dalam daftar dan menghapusnya melalui klik kanan
  • Membangun

Jika ini masalahnya, pastikan saja Anda menghapus file phantom daripada file yang sebenarnya ingin Anda simpan dalam proyek.


1

Saya punya masalah ini dan menemukan ini:

http://curlybrace.blogspot.com/2005/11/visual-c-project-continually-out-of.html

Proyek Visual C ++ secara terus menerus kedaluwarsa ( winwlm.h macwin32.h rpcerr.h macname1.hhilang)

Masalah:

Dalam Visual C ++ .Net 2003, salah satu proyek saya selalu dianggap ketinggalan zaman, meskipun tidak ada yang berubah dan tidak ada kesalahan yang dilaporkan dalam build terakhir.

Membuka file BuildLog.htm untuk proyek terkait menunjukkan daftar kesalahan PRJ0041 untuk file-file ini, tidak ada yang muncul di sistem saya di mana saja: winwlm.h macwin32.h rpcerr.h macname1.h

Setiap kesalahan terlihat seperti ini:

  MyApplication : warning PRJ0041 : Cannot find missing dependency 'macwin32.h' for file 'MyApplication.rc'.  

Proyek Anda mungkin masih dibangun, tetapi mungkin terus muncul kedaluwarsa hingga file ini ditemukan.

Larutan:

Termasuk afxres.hbukanresource.h di dalam file .rc proyek.

File .rc proyek berisi "#include resource.h". Karena kompilator sumber daya tidak menghormati #ifdefblok preprosesor , ia akan merobek dan mencoba mencari menyertakan file yang seharusnya diabaikan. Windows.h berisi banyak blok seperti itu. Termasuk afxres.h sebagai gantinya memperbaiki peringatan PRJ0041 dan menghilangkan dialog kesalahan "Proyek kedaluwarsa".


1

Dalam kasus saya, salah satu proyek berisi banyak file IDL. Kompiler MIDL menghasilkan file data DLL yang disebut 'dlldata.c' untuk masing-masing, terlepas dari nama file IDL. Ini menyebabkan Visual Studio untuk mengkompilasi file IDL pada setiap build, bahkan tanpa perubahan pada file IDL.

Solusinya adalah mengonfigurasi file output unik untuk setiap file IDL (kompiler MIDL selalu menghasilkan file seperti itu, bahkan jika / dlldata switch dihilangkan):

  • Klik kanan file IDL
  • Pilih Properties - MIDL - Output
  • Masukkan nama file unik untuk properti File DllData

1

Saya menghabiskan berjam-jam menghabiskan merobek rambut saya atas ini. Output build tidak konsisten; proyek yang berbeda akan "tidak terkini" dengan alasan berbeda dari satu bangunan ke bangunan berikutnya berturut-turut. Saya akhirnya menemukan bahwa pelakunya adalah DropBox (3.0.4). Saya menyambungkan folder sumber saya dari ... \ DropBox ke folder proyek saya (tidak yakin apakah ini alasannya), tetapi DropBox entah bagaimana "menyentuh" ​​file saat membangun. Penyinkronan dijeda dan semuanya selalu terbarui.


1

Ada beberapa alasan potensial dan - seperti yang dicatat - Anda harus mendiagnosisnya terlebih dahulu dengan mengatur verbosity MSBuild ke 'Diagnostic'. Sebagian besar alasan yang dinyatakan akan cukup jelas dan Anda dapat segera menindaklanjutinya, TETAPI sesekali MSBuild keliru mengklaim bahwa beberapa file dimodifikasi dan perlu disalin.

Jika demikian, Anda harus menonaktifkan tunnel NTFS atau menduplikasi folder output Anda ke lokasi baru. Ini dia dengan lebih banyak kata.


1

Ini terjadi pada saya beberapa kali dan kemudian pergi, sebelum saya tahu mengapa. Dalam kasus saya itu adalah:

Waktu sistem salah dalam pengaturan dual boot!

Ternyata, dual boot saya dengan Ubuntu adalah penyebab utama !! Saya terlalu malas untuk memperbaiki Ubuntu untuk berhenti mengacaukan jam perangkat keras saya. Ketika saya masuk ke Ubuntu, waktu melonjak 5 jam ke depan.

Karena nasib buruk, saya membangun proyek sekali, dengan waktu sistem yang salah, lalu mengoreksi waktu. Akibatnya, semua file build memiliki cap waktu yang salah, dan VS akan berpikir mereka semua sudah ketinggalan zaman dan akan membangun kembali proyek.


1

Sebagian besar sistem build menggunakan stempel waktu data untuk menentukan kapan pembangunan kembali harus terjadi - cap tanggal / waktu dari setiap file keluaran diperiksa terhadap waktu modifikasi terakhir dari dependensi - jika ada dependensi yang lebih segar, maka target dibangun kembali.

Ini dapat menyebabkan masalah jika salah satu dari dependensi entah bagaimana mendapatkan cap waktu data yang tidak valid karena sulit untuk cap waktu dari setiap output membangun untuk pernah melebihi timestamp dari file yang seharusnya dibuat di masa depan: P


Apakah mungkin mendapatkan alasan mengapa VS2010 memaksa membangun kembali atau menganggap proyek uptodate?
Chris U

Dalam VS6 atau mungkin VS2005 ada dialog properti kecil aneh yang akan didapat ketika mengklik kanan suatu proyek yang memiliki tab yang menunjukkan dependensi, dan output, dari setiap file dalam suatu proyek. Saya tidak tahu bagaimana cara mendapatkan laporan yang setara di VS2008 (atau VS2010)
Chris Becke

1

Bagi saya, masalah muncul dalam proyek WPF di mana beberapa file memiliki properti 'Build Action' mereka diatur ke 'Resource' dan 'Salin ke Direktori Output' diatur ke 'Salin jika lebih baru'. Solusinya adalah mengubah properti 'Salin ke Direktori Output' menjadi 'Jangan salin'.

msbuild tahu untuk tidak menyalin file 'Sumber Daya' ke output - tetapi masih memicu membangun jika mereka tidak ada di sana. Mungkin itu bisa dianggap bug?

Ini sangat membantu dengan jawaban di sini mengisyaratkan bagaimana membuat msbuild menumpahkan kacang pada mengapa ia terus membangun semuanya!


0

Jika Anda mengubah argumen Perintah Debugging untuk proyek, ini juga akan memicu pesan proyek perlu dibangun kembali. Meskipun target itu sendiri tidak dipengaruhi oleh argumen Debugging, properti proyek telah berubah. Jika Anda membangun kembali, pesannya akan hilang.


0

Saya memiliki masalah serupa dengan Visual Studio 2005, dan solusi saya terdiri dari lima proyek dalam ketergantungan berikut (pertama dibangun di atas):

Video_Codec depends on nothing
Generic_Graphics depends on Video_Codec
SpecificAPI_Graphics depends on Generic_Graphics
Engine depends on Specific_Graphics
Application depends on Engine.

Saya menemukan bahwa proyek Video_Codec ingin membangun penuh bahkan setelah bersih lalu membangun kembali solusi.

Saya memperbaikinya dengan memastikan pdbfile output dari C / C ++ dan linker cocok dengan lokasi yang digunakan oleh proyek kerja lainnya. Saya juga mengaktifkan RTTI.


0

Satu lagi di Visual Studio 2015 SP3, tetapi saya telah mengalami masalah serupa di Visual Studio 2013 beberapa tahun yang lalu.

Masalah saya adalah entah bagaimana file cpp yang salah digunakan untuk header yang sudah dikompilasi (jadi saya punya dua file cpp yang membuat header yang sudah dikompilasi). Sekarang mengapa Visual Studio mengubah bendera pada cpp yang salah untuk 'membuat header yang dikompilasi' tanpa permintaan saya, saya tidak tahu, tapi itu bisa terjadi ... mungkin beberapa plugin atau sesuatu ???

Bagaimanapun, file cpp yang salah menyertakan file version.h yang diubah pada setiap build. Jadi Visual Studio membangun kembali semua tajuk dan karena itu seluruh proyek.

Nah, sekarang sudah kembali ke perilaku normal.


0

Saya punya proyek VC ++ yang selalu mengkompilasi semua file dan sebelumnya telah ditingkatkan dari VS2005 ke VS2010 (oleh orang lain). Saya menemukan bahwa semua file cpp dalam proyek kecuali StdAfx.cpp diatur ke Buat (/ Yc) header yang dikompilasi. Saya mengubah ini sehingga hanya StdAfx.cpp yang diatur untuk membuat header yang telah dikompilasi dan sisanya ditetapkan untuk Menggunakan (/ Yu) header yang sudah dikompilasi dan ini memperbaiki masalah bagi saya.


0

Saya menggunakan Visual Studio 2013 dan baru saja memperbarui ke pembaruan Windows 10 Mei 2019 dan kompilasi tiba-tiba harus diulang setiap kali, terlepas dari perubahan. Mencoba mengganti nama pch ke ProjectName alih-alih TargetName, mencari file yang hilang dengan log terperinci dan skrip Python itu, tetapi pada akhirnya saatnya saya tidak disinkronkan dengan server MS (seperti milidetik).

Apa yang memutuskan ini untuk saya adalah

  • "Sesuaikan tanggal dan waktu" di panel kontrol
  • "Sinkronkan Sekarang"

Sekarang proyek saya tidak perlu dikompilasi ulang tanpa alasan.


0

Saya pikir Anda menempatkan beberapa baris baru atau spasi putih lainnya. Hapus dan tekan F5 lagi.


-3

Proyek .NET selalu dikompilasi ulang terlepas. Bagian dari ini adalah menjaga agar IDE tetap mutakhir (seperti IntelliSense). Saya ingat menanyakan pertanyaan ini di forum Microsoft tahun yang lalu, dan ini adalah jawaban yang saya berikan.


1
Dalam VS2008 proyek tidak membangun kembali setiap saat. Ini sangat mengganggu karena dll sangat bertingkat rendah dan memaksa hampir semua dll saya untuk membangun kembali. Ada yang salah pada migrasi dan saya tidak tahu apa.
Chris U

2
2008, 2010, 2012 dan 2013 tidak membangun kembali .NET proyek setiap kali
paulm

Ada kompilasi back ground yang sedang berlangsung (dan ingat jawaban ini berumur 10 tahun) untuk menjaga intellisense berfungsi. I
Preet Sangha
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.