2014-01-09 55 views
3

在對我的項目進行了一些更改後,Visual Studio開始總是重新編譯所有源代碼,導致所有依賴項目也重新編譯,從而顯着減慢了開發速度。這是爲什麼?Visual Studio總是重新編譯代碼,即使它沒有改變

  • 只有在檢測到XML documentation file並且有一些文件與Copy always時纔會發生。如果您更改其中任何一項,則不會重新編譯源代碼。
  • 只有在Visual Studio內編譯時纔會發生 - 編譯時使用命令行中的MSBuild時,不會重新編譯源代碼。
  • 的Visual Studio 2012更新4
+0

我使用VS 2013更新2,我看到相同的不想要的行爲:當源代碼沒有發生任何更改時重新編譯項目。即使我沒有在我的解決方案的任何項目中選中「XML文檔文件」,也會發生這種情況。所以還有其他原因。 :-( – farfareast

+0

好吧,你可以在下面我的回答中對它進行調查,並報告你的發現。 – Jonathan

回答

1

這似乎是在Visual Studio中的一個bug,當項目有XML documentation file查了一些文件與Copy always

攝製:

  1. 創建新項目 - C#類庫。
  2. 項目屬性=>生成=>檢查XML documentation file
  3. 項目=>添加=>新項目=>文本文件TextFile1.txt
  4. 變化TextFile1.txt Copy to Output DirectoryCopy always
  5. 右擊項目=>打造
    • 項目編譯
  6. 右擊項目=>建立

預計:項目不應該建,建輸出應該說:

========== Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped ========== 

實際:項目是建,輸出是:

------ Build started: Project: ClassLibrary1, Configuration: Debug Any CPU ------ 
    ClassLibrary1 -> bin\Debug\ClassLibrary1.dll 
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== 

Intestigation:車削在詳細日誌中,您會看到:

Target "CoreCompile" in file "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets" from project "ClassLibrary1.csproj" (target "Compile" depends on it): 
Building target "CoreCompile" completely. 
Output file "bin\Debug\ClassLibrary1.XML" does not exist. 

尋找procmon,你會發現在MSBuild.exe運行之前,devenv.exe將「ClassLibrary1.XML」重命名爲「vsA381.tmp」。重命名堆棧跟蹤:

KERNEL32!MoveFileW+0x17 
csproj!CMoveOutOfTheWayScope::EnterScope+0x85 
csproj!CVsProjBuildableProjectCfg::StartBuildProcessWithTarget+0x50b 
csproj!CVsProjBuildableProjectCfg::StartBuildProcess+0xc 
csproj!CVsProjBuildableProjectCfg::StartBuildEx+0x15 
msenv!CSUIBuilder::DoBuild+0x1a3 
msenv!CSUIBuilder::Run+0x66 
相關問題