Visual Studio 2010 luôn nghĩ rằng dự án đã lỗi thời, nhưng không có gì thay đổi


194

Tôi có một vấn đề rất giống như được mô tả ở đây .

Tôi cũng đã nâng cấp một giải pháp hỗn hợp gồm các dự án C ++ / CLI và C # từ Visual Studio 2008 lên Visual Studio 2010. Và bây giờ trong Visual Studio 2010, một dự án C ++ / CLI luôn hết hạn.

Ngay cả khi nó đã được biên dịch và liên kết ngay trước đó và F5được nhấn, hộp thông báo "Dự án đã hết hạn. Bạn có muốn xây dựng nó không?" xuất hiện. Điều này rất khó chịu vì tệp DLL rất thấp và buộc hầu hết các dự án của giải pháp phải xây dựng lại.

Cài đặt pdb của tôi được đặt thành giá trị mặc định ( giải pháp được đề xuất cho vấn đề này ).

Có thể lấy lý do tại sao Visual Studio 2010 buộc phải xây dựng lại hoặc nghĩ rằng một dự án đã được cập nhật?

Còn ý tưởng nào khác tại sao Visual Studio 2010 lại hành xử như vậy không?



Câu trả lời:


224

Chỉ dành cho Visual Studio / Express 2010. Xem các câu trả lời khác (dễ dàng hơn) cho VS2012, VS2013, v.v.

Để tìm (các) tệp bị thiếu , hãy sử dụng thông tin từ bài viết Kích hoạt ghi nhật ký hệ thống dự án C ++ để cho phép ghi nhật ký gỡ lỗi trong Visual Studio và để nó chỉ cho bạn biết điều gì gây ra việc xây dựng lại:

  1. Mở devenv.exe.configtệp (tìm thấy trong %ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\hoặc trong %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\). Đối với phiên bản Express, tệp cấu hình được đặt tên V*Express.exe.config.
  2. Thêm dòng sau </configSections>: Dòng:

    <system.diagnostics>
      <switches>
        <add name="CPS" value="4" />
      </switches>
    </system.diagnostics>
    
  3. Khởi động lại Visual Studio
  4. Mở DbgView và đảm bảo rằng nó đang bắt đầu ra gỡ lỗi
  5. Cố gắng gỡ lỗi (nhấn F5 trong Visual Studio)
  6. Tìm kiếm nhật ký gỡ lỗi cho bất kỳ dòng nào của biểu mẫu:

    Thông tin devenv.exe: 0: Dự án 'Bla \ Bla \ Dummy.vcxproj' không cập nhật vì xây dựng đầu vào 'Bla \ Bla \ someFile.h' bị thiếu.

    (Tôi chỉ cần nhấn Ctrl + F và tìm kiếm not up to date) Đây sẽ là các tài liệu tham khảo khiến dự án bị "lỗi thời" vĩnh viễn.

Để sửa lỗi này, hãy xóa mọi tham chiếu đến các tệp bị thiếu khỏi dự án của bạn hoặc cập nhật các tham chiếu để chỉ ra vị trí thực tế của chúng.

Lưu ý: Nếu sử dụng 2012 trở lên thì đoạn mã phải là:

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

4
> Mở DbgView và đảm bảo rằng nó đang bắt đầu ra gỡ lỗi. Làm thế nào để đảm bảo rằng việc bắt giữ được bắt đầu? Tôi có cùng một vấn đề với các dự án xây dựng lại. Nhưng không có bất kỳ thông tin nào trong DebugView. Tôi đã bật 5 tùy chọn đầu tiên trong menu 'Capture' của DebugView. (Và cảm ơn vì đã liên kết tốt trong câu trả lời!)
sergtk

3
Điều này đã giúp chúng tôi tìm ra nó; tuy nhiên, chúng tôi cũng phải xóa thư mục bản dựng trung gian trước khi các tham chiếu .H cuối cùng biến mất - có lẽ để làm mới StdAfx.obj? Dù sao, sau khi xóa tất cả các thư mục xây dựng trung gian và dọn dẹp các tệp dự án, chúng tôi cũng rất tốt để đi.
AHelps

2
Cảm ơn bạn - bây giờ tại sao không có trong cửa sổ đầu ra thông thường?
Martin Beckett

4
Nếu bạn đang sử dụng VS2012, có một đoạn mã hơi khác để dán vào tệp cấu hình. Điều này được liên kết từ bài viết gốc, nhưng chỉ trong trường hợp: Kích hoạt hệ thống dự án C ++ và Javascript truy tìm VS2012
rmaVT

3
FYI, điều này dường như không còn hoạt động nữa trong VS2013 - sau khi chỉnh sửa tệp cấu hình, nó không tạo ra bất cứ điều gì đáng quan tâm trong DebugView.
Nathan Reed

166

Trong Visual Studio 2012 tôi đã có thể đạt được kết quả tương tự dễ dàng hơn so với giải pháp được chấp nhận.

Tôi đã thay đổi tùy chọn trong menu Công cụTùy chọnDự án và Giải phápXây dựng và Chạy → * Dự án xây dựng chi tiết đầu ra của dự án MSBuild "từ Tối thiểu đến Chẩn đoán .

Sau đó, trong đầu ra bản dựng, tôi đã tìm thấy các dòng tương tự bằng cách tìm kiếm "không cập nhật":

Dự án 'blabla' không được cập nhật. Mục dự án 'c: \ foo \ bar.xml' có thuộc tính 'Sao chép vào Thư mục đầu ra' được đặt thành 'Sao chép luôn'.


6
Điều này cũng hoạt động trong VS2013, nơi tinh chỉnh tập tin cấu hình dường như không hoạt động nữa.
Nathan Reed

1
Điều này làm việc rất tốt cho tôi. Hóa ra tôi đã có một tham chiếu vòng tròn (project1 -> project2, project2 -> project1.dll), điều này gây ra hầu hết các giải pháp để xây dựng mỗi lần. Nó thậm chí không được sử dụng.
Kobi

7
Với C #, tôi không thể tìm thấy bất cứ điều gì với "không cập nhật", từ ma thuật dường như "mới hơn"
Pete

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

3
Trong VS2013, bạn cũng có thể phải tìm kiếm was modified atở chế độ chẩn đoán vì tôi không có not up to datekết quả đầu ra.
jaba

59

Điều này đã xảy ra với tôi ngày hôm nay. Tôi đã có thể theo dõi nguyên nhân: Dự án bao gồm một tệp tiêu đề không còn tồn tại trên đĩa.

Loại bỏ các tập tin từ dự án đã giải quyết vấn đề.


2
Không, tôi không có bất kỳ tệp tiêu đề nào không tồn tại trên đĩa. Nhưng làm thế nào bạn có thể theo dõi nguyên nhân? Làm thế nào bạn phát hiện ra rằng có một tập tin bị mất? Có lẽ tôi có thể tìm hiểu thêm về vấn đề của mình bằng cách kiểm tra theo cách tương tự như bạn.
Chris U

1
Có một giải pháp khác khi điều này xảy ra với tôi. Có lẽ khá mơ hồ, nhưng tôi đã biên dịch dự án từ một máy tính, rồi một máy tính khác và phát hiện ra tôi đã vô tình đặt thời gian thành AM trên một máy tính và PM trên máy tính khác. Sự khác biệt lớn về thời gian khiến một trong các máy tính luôn luôn biên dịch mọi thứ hoặc không bao giờ biên dịch bất cứ thứ gì ngay cả khi tôi sửa đổi các tệp nguồn.
Kyle

1
Điều này làm việc cho tôi mặc dù các tập tin tiêu đề hiện có. Sử dụng câu trả lời dưới đây để cho phép đăng nhập, nó nghĩ rằng một tệp tiêu đề bị thiếu. Tôi đã loại bỏ sự phụ thuộc của nó, thêm nó trở lại và xây dựng lại tối thiểu hoạt động trở lại!
Ed Bayiates

đồng hồ lệch sẽ khiến hầu hết các hệ thống xây dựng nổ tung
paulm

15

Chúng tôi cũng gặp vấn đề này và tìm ra cách giải quyết nó.

Vấn đề như đã nêu ở trên "Tệp không còn tồn tại trên đĩa."

Điều này không hoàn toàn chính xác. Tệp tồn tại trên đĩa, nhưng tệp .VCPROJ đang tham chiếu tệp ở một nơi khác.

Bạn có thể 'khám phá' điều này bằng cách vào "chế độ xem tệp bao gồm" và lần lượt nhấp vào từng tệp bao gồm cho đến khi bạn tìm thấy tệp mà Visual Studio không thể tìm thấy. Sau đó, bạn THÊM tệp đó (dưới dạng một mục hiện có) và xóa tham chiếu không thể tìm thấy và mọi thứ đều ổn.

Một câu hỏi hợp lệ là: Làm thế nào Visual Studio thậm chí có thể xây dựng nếu nó không biết các tệp bao gồm ở đâu?

Chúng tôi nghĩ rằng tệp .vcproj có một số đường dẫn tương đối đến tệp vi phạm ở đâu đó mà nó không hiển thị trong GUI Visual Studio và điều này giải thích tại sao dự án sẽ thực sự xây dựng mặc dù chế độ xem dạng cây bao gồm không chính xác.


4
Lý do VC có thể xây dựng là vì chúng là các tệp tiêu đề - và các tệp tiêu đề không thực sự được biên dịch. Nếu bất kỳ tệp tiêu đề nào thực sự được sử dụng bởi tệp .C / .CPP, thì và chỉ sau đó, quá trình xây dựng sẽ thất bại. Vì vậy, trình kiểm tra phụ thuộc (tìm tệp tiêu đề) đánh dấu dự án là cần xây dựng lại, nhưng trình biên dịch thực tế (chỉ bỏ qua danh sách các tệp tiêu đề) có thể thành công.
AHelps

4
Không thể tin được ... điều này cũng xảy ra nếu bạn có một tham chiếu cũ đến một tệp văn bản (dù sao đó cũng không phải là một phần của bản dựng ngay cả khi nó tồn tại !!) trong tệp .vcxproj của bạn. Tôi đã tạo một dự án với trình hướng dẫn và nó bao gồm tệp ReadMe.txt mà tôi đã xóa khỏi đĩa, nhưng quên xóa khỏi vcxproj.
DLRdave

Tôi không thể tìm thấy bất kỳ tệp nào mà tôi không thể mở (ngoại trừ một tệp, nhưng đó là trên ổ cứng. Nó nói rằng một loại tệp nào đó không thể được mở trên Visual Studio 2010 Express SKU hoặc đại loại như thế.
Chim cánh cụt vô danh

2
"Bao gồm xem tập tin" là gì và làm thế nào để bạn nhận được nó?
Bến

1
Bao gồm Chế độ xem tệp có lẽ là phần Bao gồm tệp trong Solution Explorer.
Jaywalker

12

Câu trả lời được chấp nhận đã giúp tôi đi đúng hướng để tìm ra cách giải quyết vấn đề này cho dự án sai lầm mà tôi phải bắt đầu làm việc. Tuy nhiên, tôi đã phải đối phó với một số lượng lớn các tiêu đề xấu bao gồm. Với đầu ra gỡ lỗi dài dòng, việc loại bỏ một nguyên nhân khiến IDE đóng băng trong 30 giây trong khi xuất ra lỗi gỡ lỗi, khiến quá trình diễn ra rất chậm.

Tôi đã mất kiên nhẫn và đã viết một tập lệnh Python nhanh và bẩn để kiểm tra các tệp dự án (Visual Studio 2010) cho tôi và xuất tất cả các tệp bị thiếu cùng một lúc, cùng với các bộ lọc mà chúng được đặt. Bạn có thể tìm thấy nó như một Gist tại đây: https://gist.github.com/antiuniverse/3825678 (hoặc ngã ba này hỗ trợ các đường dẫn tương đối )

Thí dụ:

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)
  ...

Mã nguồn:

#!/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 + ")")

Sửa đổi mã của bạn để hỗ trợ các đường dẫn tương đối. Hãy cập nhật ý chính của bạn và xóa liên kết đến ngã ba của tôi!
ixe013

Nó hiệu quả tuyệt vời đối với tôi! Thật là tiết kiệm thời gian! Cảm ơn! Tôi đã KHÔNG CÓ trong đầu ra chẩn đoán cho tôi biết điều gì sai nhưng tiện ích của bạn đã cho tôi thấy!
Ed Bayiates 17/03/2016

Một ngã ba để enum một dir và gọi nó là trên mỗi vcxproj tìm thấy gist.github.com/paulsapps/4992d2d460f4ef44538d62c9e875ca78
paulm

8

Tôi đã xóa một cpp và một số tệp tiêu đề khỏi giải pháp (và từ đĩa) nhưng vẫn gặp sự cố.

Điều quan trọng là, mọi tệp mà trình biên dịch sử dụng sẽ đi vào tệp * .tlog trong thư mục tạm thời của bạn. Khi bạn xóa một tệp, tệp * .tlog này không được cập nhật. Đó là tệp được sử dụng bởi các bản dựng tăng dần để kiểm tra xem dự án của bạn có được cập nhật hay không.

Chỉnh sửa tệp .tlog này theo cách thủ công hoặc làm sạch dự án của bạn và xây dựng lại.


Đây là nó cho tôi! Tôi đã dành hàng giờ sau khi sửa các tệp bị thiếu bao gồm, VẪN đã hết hạn, đăng nhập cho thấy sự chộp lấy không thể kết luận cho những gì còn thiếu. Cần phải loại bỏ các tệp TLOG đó! Cảm ơn!
Ed Bayiates

6

Tôi đã gặp một vấn đề tương tự, nhưng trong trường hợp của tôi không có tệp nào bị thiếu, có một lỗi trong cách định nghĩa tệp đầu ra pdb: Tôi quên hậu tố .pdb (Tôi phát hiện ra với thủ thuật ghi nhật ký gỡ lỗi).

Để giải quyết vấn đề tôi đã thay đổi, trong tệp vxproj, dòng sau:

<ProgramDataBaseFileName>MyName</ProgramDataBaseFileName>

đến

<ProgramDataBaseFileName>MyName.pdb</ProgramDataBaseFileName>

6

Tôi đã gặp vấn đề này trong VS2013 (Bản cập nhật 5) và có thể có hai lý do cho điều đó, cả hai lý do bạn có thể tìm thấy bằng cách bật đầu ra bản dựng "Chi tiết" trong "Công cụ" -> "Dự án và Giải pháp" -> "Xây dựng và chạy" .

  1. "Forcing recompile of all source files due to missing PDB "..."
    Điều này xảy ra khi bạn vô hiệu hóa đầu ra thông tin gỡ lỗi trong các tùy chọn trình biên dịch của bạn (Trong Cài đặt dự án: „C / C ++, -> Định dạng thông tin gỡ lỗi Định dạng thành„ Không ai và „Trình liên kết -> Tạo ra gỡ lỗi Thông tin gỡ lỗi thành„ Không có :) . Nếu bạn đã để lại „C / C ++, -> Chương trình cơ sở dữ liệu tên tệp tên mặc định (đó là„ $ (IntDir) vc $ (PlatformToolsetVersion) .pdb,), VS sẽ không tìm thấy tệp do lỗi ( https : //connect.microsoft.com/VisualStudio/feedback/details/833494/project-with-debug-inif-disables-always-rebuilds ).
    Để sửa nó, chỉ cần xóa tên tệp thành "" (trường trống).

  2. "Forcing rebuild of all source files due to a change in the command line since the last build."
    Đây dường như cũng là một lỗi VS đã biết ( https://connect.microsoft.com/VisualStudio/feedback/details/833943/forcing-rebuild-of-all-source-files-due-to-a-change-in- lệnh-line-từ-the-last-build ) và dường như được sửa trong các phiên bản mới hơn (nhưng không phải là VS2013). Tôi biết không có cách giải quyết, nhưng nếu bạn làm, bằng mọi cách, hãy đăng nó ở đây.


1
Đây là lý do tại sao vấn đề của tôi. Không có tin nhắn "không cập nhật" nào ở trên tôi và chúng tôi phải mất thời gian để theo dõi tin nhắn này. Đồng thời xóa nó hoặc đặt thành $ (IntDir) $ (ProjectName) .pdb làm việc cho chúng tôi (hãy chắc chắn thay đổi nó cho cả cấu hình gỡ lỗi và phát hành)
John Grabanski

4

Tôi không biết có ai khác gặp phải vấn đề tương tự không, nhưng các thuộc tính của dự án của tôi đã được "Configuration Properties" -> C/C++ -> "Debug Information Format"đặt thành "Không" và khi tôi chuyển nó trở lại "Cơ sở dữ liệu chương trình (/ Zi)", điều đó đã ngăn dự án biên dịch lại mỗi lần .


1
+1 cái này cũng hoạt động với tôi, trên Visual Studio 2013. Cụ thể, khi tôi chuyển nó trở lại thành Không, nó cũng hoạt động tốt trở lại.
dùng541686

4

Một giải pháp đơn giản khác được tham chiếu bởi Diễn đàn Visual Studio .

Thay đổi cấu hình: menu Công cụTùy chọnDự án và Giải phápCài đặt dự án VC ++Chế độ Explorer Explorer để hiển thị tất cả các tệp .

Sau đó, bạn có thể xem tất cả các tệp trong Solution Explorer.

Tìm các tệp được đánh dấu bằng biểu tượng màu vàng và xóa chúng khỏi dự án.

Được rồi.


4

Visual Studio 2013 - "Buộc biên dịch lại tất cả các tệp nguồn do thiếu PDB". Tôi đã bật đầu ra bản dựng chi tiết để xác định vấn đề: Tôi đã bật đầu ra bản dựng "Chi tiết" trong "Công cụ" → "Dự án và giải pháp" → "Xây dựng và chạy".

Tôi đã có một số dự án, tất cả C ++, tôi đặt tùy chọn cho cài đặt dự án: (C / C ++ → Định dạng thông tin gỡ lỗi) thành Cơ sở dữ liệu chương trình (/ Zi) cho dự án có vấn đề. Tuy nhiên, điều này không ngăn được vấn đề cho dự án đó. Vấn đề xuất phát từ một trong những dự án C ++ khác trong giải pháp.

Tôi đặt tất cả dự án C ++ thành "Cơ sở dữ liệu chương trình (/ Zi)". Điều này đã khắc phục vấn đề.

Một lần nữa, dự án báo cáo vấn đề không phải là dự án vấn đề. Hãy thử đặt tất cả các dự án thành "Cơ sở dữ liệu chương trình (/ Zi)" để khắc phục sự cố.


VS2015 cũng tương tự về cài đặt cho đầu ra bản dựng dài dòng
LOAS

3

Tôi đã gặp vấn đề này ngày hôm nay, tuy nhiên nó có một chút khác biệt. Tôi đã có một dự án CUDA DLL trong giải pháp của tôi. Biên dịch trong một giải pháp sạch là OK, nhưng nếu không thì nó đã bị lỗi và trình biên dịch luôn coi dự án CUDA DLL là không cập nhật.

Tôi đã thử giải pháp từ bài viết này .

Nhưng không có tập tin tiêu đề bị thiếu trong giải pháp của tôi. Sau đó tôi tìm ra lý do trong trường hợp của tôi.

Tôi đã thay đổi Thư mục trung gian của dự án trước đây, mặc dù nó không gây rắc rối. Và bây giờ khi tôi thay đổi Thư mục trung gian của Dự án CUDA DLL trở lại $ (Cấu hình) \, mọi thứ sẽ hoạt động trở lại.

Tôi đoán có một số vấn đề nhỏ giữa CUDA Build Customization và Thư mục trung gian không mặc định.


Sử dụng VS2013 (C #), tôi đã thử nghiệm cài đặt MiddleOutputPath. Nếu điều này trỏ đến một thư mục trên một ổ đĩa khác thì giải pháp, tòa nhà gia tăng sẽ ngừng hoạt động - MSBuild phàn nàn rằng một số tệp nguồn luôn bị lỗi thời với một số tệp trung gian (thường là PDB). Xem bài viết trên blog của tôi .
Robert Schmidt

3

Tôi gặp vấn đề tương tự và làm theo các hướng dẫn ở trên (câu trả lời được chấp nhận) để xác định vị trí các tệp bị thiếu, nhưng không phải là không gãi đầu. Dưới đây là tóm tắt của tôi về những gì tôi đã làm. Để chính xác, đây không phải là các tệp bị thiếu do dự án không yêu cầu xây dựng (ít nhất là trong trường hợp của tôi), nhưng chúng là các tham chiếu đến các tệp không tồn tại trên đĩa không thực sự cần thiết.

Đây là câu chuyện của tôi:

  1. Trong Windows 7, tập tin được đặt tại %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\%. Có hai tập tin tương tự devenv.exe.config.configdevenv.exe.config. Bạn muốn thay đổi sau này.

  2. Trong Windows 7, bạn không có quyền chỉnh sửa tệp này trong tệp chương trình. Chỉ cần sao chép nó ở một nơi khác (máy tính để bàn) thay đổi nó và hơn là sao chép nó trở lại vị trí tệp chương trình.

  3. Tôi đã cố gắng tìm ra cách kết nối DebugView với IDE để xem các tệp bị thiếu. Chà, bạn không phải làm gì cả. Chỉ cần chạy nó, và nó sẽ nắm bắt tất cả các tin nhắn. Đảm bảo Capture Eventstùy chọn menu được chọn trong Capturemenu mà theo mặc định sẽ được chọn.

  4. DebugView sẽ KHÔNG hiển thị tất cả các tệp bị thiếu cùng một lúc (ít nhất là nó không dành cho tôi)! Bạn sẽ chạy DebugView và chạy dự án trong Visual Studio 2010. Nó sẽ nhắc project out of datethông báo, chọn Yes để xây dựng và DebugView sẽ hiển thị tệp đầu tiên bị thiếu hoặc gây ra việc xây dựng lại. Mở tệp dự án (không phải tệp giải pháp) trong Notepad và tìm kiếm tệp đó và xóa nó. Bạn nên đóng dự án của bạn và mở lại nó trong khi thực hiện xóa này. Lặp lại quy trình này cho đến khi DebugView không còn hiển thị bất kỳ tệp nào bị thiếu.

  5. Thật hữu ích khi đặt bộ lọc thư không cập nhật từ nút thanh công cụ DebugView hoặc Chỉnh sửaBộ lọc / Đánh dấu tùy chọn . Theo cách đó, các thông điệp duy nhất mà nó hiển thị là một trong đó có chuỗi 'không cập nhật' trong đó.

Tôi đã có rất nhiều tệp là các tài liệu tham khảo không cần thiết và loại bỏ tất cả chúng đã khắc phục sự cố theo các bước trên.

Cách thứ hai để tìm tất cả các tệp bị thiếu cùng một lúc

Có một cách thứ hai để tìm tất cả các tệp này cùng một lúc, nhưng nó bao gồm (a) kiểm soát nguồn và (b) tích hợp nó với Visual Studio 2010. Sử dụng Visual Studio 2010 , thêm dự án của bạn vào một vị trí mong muốn hoặc vị trí giả trong nguồn điều khiển. Nó sẽ cố gắng thêm tất cả các tệp, bao gồm cả những tệp không tồn tại trên đĩa nhưng được tham chiếu trong tệp dự án. Chuyển đến phần mềm kiểm soát nguồn của bạn như Perforce và phần mềm này sẽ đánh dấu các tệp không tồn tại trên đĩa theo một bảng màu khác. Perforce cho thấy họ với một khóa màu đen trên chúng. Đây là những tài liệu tham khảo còn thiếu của bạn. Bây giờ bạn có một danh sách tất cả chúng, và bạn có thể xóa tất cả chúng khỏi tệp dự án của bạn bằng Notepad và dự án của bạn sẽ không phàn nàn về việc hết hạn .


2

Đối với tôi, đó là sự hiện diện của tệp tiêu đề không tồn tại trên "Tệp tiêu đề" bên trong dự án. Sau khi xóa mục này (nhấp chuột phải> Loại trừ khỏi Dự án) lần đầu tiên được biên dịch lại, sau đó trực tiếp

========== Xây dựng: 0 thành công, 0 thất bại, 5 cập nhật, 0 bỏ qua ==========

và không có nỗ lực xây dựng lại mà không sửa đổi đã được thực hiện. Tôi nghĩ rằng việc kiểm tra trước khi xây dựng được thực hiện bởi VS2010 (không chắc là có tài liệu hay không) có thể kích hoạt cờ "Luôn luôn tạo ra".


2

Nếu bạn đang sử dụng lệnh MSBuild dòng lệnh (không phải Visual Studio IDE), ví dụ nếu bạn đang nhắm mục tiêu AppVeyor hoặc bạn chỉ thích dòng lệnh, bạn có thể thêm tùy chọn này vào dòng lệnh MSBuild của mình:

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

Như tài liệu ở đây (cảnh báo: mức độ chi tiết MSDN thông thường). Khi quá trình xây dựng kết thúc, tìm kiếm chuỗi will be compiledtrong tệp nhật ký được tạo trong quá trình xây dựng , MyLog.log.


1
/ verbosity: chi tiết cũng sẽ cung cấp thông tin tương tự nhưng không phải là dài dòng. Sau đó, bạn có thể tìm kiếm "sẽ được biên dịch thành".
Shane Gannon

1
Bạn cũng nên tìm kiếm "Yêu cầu biên dịch nguồn" cũng sẽ tìm thấy các liên kết
Shane Gannon

2

Tôi đang sử dụng Visual Studio 2013 Professional với Bản cập nhật 4 nhưng không tìm thấy giải pháp với bất kỳ đề xuất nào khác, tuy nhiên, tôi đã quản lý để giải quyết vấn đề cho dự án Nhóm của mình.

Đây là những gì tôi đã làm để gây ra vấn đề -

  • Tạo một đối tượng lớp mới (Dự án -> Thêm lớp)
  • Đổi tên tệp qua Solution Explorer và nhấp vào có khi được hỏi liệu tôi có muốn tự động đổi tên tất cả các tham chiếu cho phù hợp không

Đây là những gì tôi đã làm để giải quyết vấn đề -

  • Chuyển đến Trang chủ Team Explorer
  • Nhấp vào Kiểm soát nguồn Explorer
  • Đi sâu vào thư mục chứa tất cả các tệp lớp / dự án
  • Tìm thấy tên tệp ORIGINAL trong danh sách và xóa nó bằng cách nhấp chuột phải
  • Xây dựng

Nếu đây là trường hợp dành cho bạn thì hãy chắc chắn rằng bạn đang xóa tệp ảo hơn là tệp thực tế bạn muốn giữ trong dự án.


1

Tôi đã có vấn đề này và tìm thấy điều này:

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

Dự án Visual C ++ liên tục lỗi thời ( winwlm.h macwin32.h rpcerr.h macname1.hthiếu)

Vấn đề:

Trong Visual C ++ .Net 2003, một trong những dự án của tôi luôn bị lỗi thời, mặc dù không có gì thay đổi và không có lỗi nào được báo cáo trong bản dựng trước.

Mở tệp BuildLog.htm cho dự án tương ứng hiển thị danh sách các lỗi PRJ0041 cho các tệp này, không có lỗi nào xuất hiện trên hệ thống của tôi ở bất cứ đâu: winwlm.h macwin32.h rpcerr.h macname1.h

Mỗi lỗi trông giống như thế này:

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

Dự án của bạn vẫn có thể xây dựng, nhưng có thể tiếp tục xuất hiện lỗi thời cho đến khi tìm thấy tệp này.

Giải pháp:

Bao gồm afxres.h thay vì resource.hbên trong tệp .rc của dự án.

Tệp .rc của dự án chứa "#include resource.h". Vì trình biên dịch tài nguyên không tôn trọng #ifdefcác khối tiền xử lý , nó sẽ xé nát và cố gắng tìm các tệp bao gồm nên bỏ qua. Windows.h chứa nhiều khối như vậy. Thay vào đó, bao gồm afxres.h đã sửa các cảnh báo PRJ0041 và loại bỏ hộp thoại lỗi "Dự án đã lỗi thời".


1

Trong trường hợp của tôi, một trong các dự án chứa nhiều tệp IDL. Trình biên dịch MIDL tạo ra một tệp dữ liệu DLL có tên 'dlldata.c' cho mỗi tệp, bất kể tên tệp IDL. Điều này khiến Visual Studio biên dịch các tệp IDL trên mọi bản dựng, thậm chí không có thay đổi đối với bất kỳ tệp IDL nào.

Cách giải quyết là định cấu hình một tệp đầu ra duy nhất cho mỗi tệp IDL (trình biên dịch MIDL luôn tạo một tệp như vậy, ngay cả khi chuyển đổi / dlldata bị bỏ qua):

  • Nhấp chuột phải vào tệp IDL
  • Chọn Thuộc tính - MIDL - Đầu ra
  • Nhập tên tập tin duy nhất cho các tập tin DllData bất động sản

1

Tôi đã dành nhiều giờ dành cho việc xé tóc vì điều này. Sản lượng xây dựng không nhất quán; các dự án khác nhau sẽ "không cập nhật" vì các lý do khác nhau từ một bản dựng đến bản dựng liên tiếp tiếp theo. Cuối cùng tôi đã tìm ra thủ phạm là DropBox (3.0.4). Tôi chuyển thư mục nguồn của mình từ ... \ DropBox vào thư mục dự án của tôi (không chắc đây có phải là lý do không), nhưng DropBox bằng cách nào đó "chạm" vào các tệp trong quá trình xây dựng. Tạm dừng đồng bộ hóa và mọi thứ luôn được cập nhật.


1

Có khá nhiều lý do tiềm năng và - như đã lưu ý - trước tiên bạn cần chẩn đoán chúng bằng cách đặt mức độ chi tiết của MSBuild thành 'Chẩn đoán'. Hầu hết thời gian, lý do đã nêu sẽ tự giải thích và bạn có thể hành động ngay lập tức, NHƯNG đôi khi MSBuild sẽ nhầm lẫn rằng một số tệp đã được sửa đổi và cần được sao chép.

Nếu đó là trường hợp, bạn cần phải vô hiệu hóa đường hầm NTFS hoặc sao chép thư mục đầu ra của bạn sang một vị trí mới. Đây là nhiều từ hơn.


1

Điều này đã xảy ra với tôi nhiều lần và sau đó biến mất, trước khi tôi có thể hiểu tại sao. Trong trường hợp của tôi, đó là:

Sai thời gian hệ thống trong thiết lập khởi động kép!

Hóa ra, khởi động kép của tôi với Ubuntu là nguyên nhân gốc !! Tôi đã quá lười biếng để sửa Ubuntu để ngừng làm hỏng đồng hồ phần cứng của tôi. Khi tôi đăng nhập vào Ubuntu, thời gian sẽ chuyển tiếp 5 giờ.

Hết xui xẻo, tôi xây dựng dự án một lần, với thời gian hệ thống sai, rồi sửa thời gian. Do đó, tất cả các tệp xây dựng có dấu thời gian sai và VS sẽ nghĩ rằng tất cả chúng đã lỗi thời và sẽ xây dựng lại dự án.


1

Hầu hết các hệ thống xây dựng sử dụng tem thời gian dữ liệu để xác định khi nào sẽ xây dựng lại - tem ngày / giờ của bất kỳ tệp đầu ra nào được kiểm tra theo thời gian sửa đổi cuối cùng của các phụ thuộc - nếu bất kỳ phụ thuộc nào mới hơn, thì mục tiêu sẽ được xây dựng lại.

Điều này có thể gây ra sự cố nếu bất kỳ phần phụ thuộc nào bằng cách nào đó có dấu thời gian dữ liệu không hợp lệ vì khó có dấu thời gian của bất kỳ đầu ra bản dựng nào vượt quá dấu thời gian của tệp được tạo trong tương lai: P


Có thể lấy lý do tại sao VS2010 buộc phải xây dựng lại hoặc nghĩ rằng một dự án đang phát triển?
Chris U

Trong VS6 hoặc có lẽ là VS2005, có một hộp thoại thuộc tính nhỏ kỳ lạ người ta sẽ nhận được khi nhấp chuột phải vào một dự án có các tab hiển thị các phụ thuộc và đầu ra của mỗi tệp trong một dự án. Tôi không biết cách nhận báo cáo tương đương trong VS2008 (hoặc VS2010)
Chris Becke

1

Đối với tôi, vấn đề nảy sinh trong một dự án WPF nơi một số tệp có thuộc tính 'Build Action' được đặt thành 'Resource' và 'Copy to Output Directory' của chúng được đặt thành 'Sao chép nếu mới hơn'. Giải pháp dường như là thay đổi thuộc tính 'Sao chép vào Thư mục đầu ra' thành 'Không sao chép'.

msbuild biết không sao chép các tệp 'Tài nguyên' vào đầu ra - nhưng vẫn kích hoạt bản dựng nếu chúng không ở đó. Có lẽ đó có thể được coi là một lỗi?

Nó rất hữu ích với các câu trả lời ở đây gợi ý làm thế nào để msbuild làm đổ đậu vào lý do tại sao nó tiếp tục xây dựng mọi thứ!


0

Nếu bạn thay đổi các đối số Lệnh gỡ lỗi cho dự án, điều này cũng sẽ kích hoạt dự án cần được xây dựng lại thông báo. Mặc dù bản thân mục tiêu không bị ảnh hưởng bởi các đối số Gỡ lỗi, các thuộc tính dự án đã thay đổi. Nếu bạn xây dựng lại mặc dù, tin nhắn sẽ biến mất.


0

Tôi gặp vấn đề tương tự với Visual Studio 2005 và giải pháp của tôi bao gồm năm dự án phụ thuộc sau (lần đầu tiên được xây dựng ở trên cùng):

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.

Tôi đã phát hiện ra rằng dự án Video_Codec muốn xây dựng đầy đủ ngay cả sau khi hoàn toàn sạch sẽ sau đó xây dựng lại giải pháp.

Tôi đã sửa lỗi này bằng cách đảm bảo pdbtệp đầu ra của cả C / C ++ và trình liên kết khớp với vị trí được sử dụng bởi các dự án làm việc khác. Tôi cũng đã bật RTTI.


0

Một số khác trên Visual Studio 2015 SP3, nhưng tôi đã gặp một vấn đề tương tự trên Visual Studio 2013 một vài năm trước.

Vấn đề của tôi là bằng cách nào đó, một tệp cpp sai đã được sử dụng cho các tiêu đề được biên dịch trước (vì vậy tôi có hai tệp cpp tạo ra các tiêu đề được biên dịch trước). Bây giờ tại sao Visual Studio thay đổi các cờ trên cpp sai thành 'tạo các tiêu đề được biên dịch sẵn' mà không có yêu cầu của tôi Tôi không có manh mối, nhưng nó đã xảy ra ... có thể là một số plugin hoặc một cái gì đó ???

Dù sao, tệp cpp sai bao gồm tệp version.h được thay đổi trên mỗi bản dựng. Vì vậy, Visual Studio xây dựng lại tất cả các tiêu đề và vì đó là toàn bộ dự án.

Chà, bây giờ nó đã trở lại hoạt động bình thường.


0

Tôi đã có một dự án VC ++ luôn biên dịch tất cả các tệp và trước đó đã được nâng cấp từ VS2005 lên VS2010 (bởi những người khác). Tôi thấy rằng tất cả các tệp cpp trong dự án ngoại trừ StdAfx.cpp được đặt thành Tạo (/ Yc) tiêu đề được biên dịch trước. Tôi đã thay đổi điều này để chỉ StdAfx.cpp được thiết lập để tạo tiêu đề được biên dịch trước và phần còn lại được đặt thành Sử dụng (/ Yu) tiêu đề được biên dịch trước và điều này đã khắc phục sự cố cho tôi.


0

Tôi đang dùng Visual Studio 2013 và vừa cập nhật lên bản cập nhật Windows 10 tháng 5 năm 2019 và việc biên dịch đột nhiên phải được làm lại mỗi lần, bất kể thay đổi. Đã thử đổi tên pch thành ProjectName thay vì TargetName, tìm kiếm các tệp bị thiếu với nhật ký chi tiết và tập lệnh Python đó, nhưng cuối cùng, thời gian của tôi không được đồng bộ hóa với các máy chủ của MS (như mili giây).

Điều giải quyết điều này cho tôi là

  • "Điều chỉnh ngày giờ" trong bảng điều khiển
  • "Đồng bộ hóa ngay"

Bây giờ các dự án của tôi không cần phải biên dịch lại mà không có lý do.


0

Tôi nghĩ rằng bạn đã đặt một số dòng mới hoặc khoảng trắng khác. Hủy bỏ nó và nhấn F5 một lần nữa.


-3

Các dự án .NET luôn được biên dịch lại bất kể. Một phần của việc này là để giữ cho IDE luôn cập nhật (như IntelliSense). Tôi nhớ đã hỏi câu hỏi này trên một diễn đàn của Microsoft nhiều năm trước và đây là câu trả lời tôi được đưa ra.


1
Trong VS2008, dự án đã không được xây dựng lại mọi lúc. Điều này rất khó chịu vì dll rất thấp và buộc hầu hết tất cả các dll của tôi phải xây dựng lại. Đã xảy ra lỗi khi di chuyển và tôi không thể tìm ra điều gì.
Chris U

2
2008, 2010, 2012 và 2013 không xây dựng lại các dự án .NET mọi lúc
paulm

Có quá trình biên dịch mặt đất đang diễn ra (và hãy nhớ câu trả lời này là 10 năm tuổi) để giữ cho chức năng intellisense. Tôi
Preet Sangha
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.