MSBuild如何决定是否需要重建C#库?

Pet*_*nce 22 c# compiler-construction msbuild visual-studio

当MSBuild针对C#项目文件运行时,它是如何决定是否需要重建库(即调用csc)?

我想(但想确认):

  • 如果没有输出目录,重建(duh :))
  • 如果C#文件已更改,请重建
  • 如果标记为"复制"的包含文件始终更改,则重建
    • 或者它是否足够智能不重建,只是将文件复制到现有输出?
  • 如果标记为copy-if-newer的包含文件已更改,则重建
    • 与上述问题相同

Bri*_*ker 12

如果查看Microsoft.CSharp.targets(用于编译C#项目的MSBuild文件),CoreCompile目标会定义一组输入和输出.这些用于执行依赖性检查以查看CoreCompile是否需要运行.输入列表包括C#文件,资源文件,应用程序图标,强名称密钥文件以及您可以定义的其他自定义输入.

如果您有解决方案并在其上运行MSBuild并启用了诊断日志记录(/ v:diag命令行参数),则如果输出是最新的,您可能会看到此消息:

跳过目标"CoreCompile",因为所有输出文件都是与输入文件相关的最新文件.

目标文件位于.NET Framework目录(C:\windows\Microsoft.NET\Framework\v3.5 or v4.0.30319)中.