即使代码没有更改,Visual Studio也会重新编译代码

时间:2014-01-09 14:31:58

标签: visual-studio visual-studio-2012 incremental-build

对我的项目进行一些更改后,Visual Studio开始重新编译所有源代码,导致所有依赖项目也重新编译,从而大大降低了开发速度。那是为什么?

  • 仅在选中XML documentation file且有Copy always的文件时才会发生。如果您更改其中任何一个,则不会重新编译源代码。
  • 仅在Visual Studio内部编译时发生 - 从命令行使用MSBuild进行编译时,源代码不会被重新编译。
  • Visual Studio 2012 Update 4。

1 个答案:

答案 0 :(得分:1)

当项目XML documentation file使用Copy always检查了某些文件时,这似乎是Visual Studio中的错误。

<强>摄制:

  1. 创建新项目 - C#类库。
  2. 项目属性=&gt; Build =&gt;检查XML documentation file
  3. 项目=&gt;添加=&gt;新商品=&gt;文本文件TextFile1.txt
  4. 将TextFile1.txt Copy to Output Directory更改为Copy always
  5. 右键单击project =&gt;建立
    • 项目编译
  6. 右键单击project =&gt;构建
  7. 预期:项目不应该构建,构建输出应该说:

    ========== 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,您会看到devenv.exe在MSBuild.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