【发布时间】:2014-03-28 02:20:22
【问题描述】:
这种情况经常发生,我首先使用 msbuild 在命令行上构建一些解决方案,运行了一段时间,然后发现我需要更改和调试它。所以,我在 Visual Studio 中打开它并最终在 Visual Studio 中构建它。
发生的情况是 VS 重建了解决方案的相当多部分,即使我什么也没做!
深入研究会发现以下内容:
在 Visual Studio 中构建会生成空的 cs 文件并将它们注入到 Compile 项目组中。 自然,它们比已构建的二进制文件更新,因此 devenv.exe 会重建大量项目.感谢TemporaryGeneratedFile_[guid] in /obj/debug breaking build
这真是太糟糕了。我通过重命名Microsoft.WorkflowBuildExtensions.targets 文件禁用了这种行为——我不做工作流。
我想我可以侵入 CoreCompileDependsOn 并以某种方式中和来自 Microsoft.WorkflowBuildExtensions.targets 的 GenerateCompiledExpressionsTempFile 目标,但这必须在 190 个项目中完成!这是一个严重的变化。
devenv.exe 似乎关心某些文件总是被复制到输出目录,即使 msbuild 不认为这是一个问题。
确实,这里是 devenv.exe 构建日志中的一行:
Project 'HRCore.Tests' is not up to date. Project item 'C:\abc\UI\HRCore.Tests\HRImport\Import_missing_state_county.xml' has 'Copy to Output Directory' attribute set to 'Copy always'.
那又怎样? msbuild 不关心它,但 devenv 关心它。此文件不是 HRCore.Tests 的依赖项,msbuild 做对了。
与此同时,我将其从 Always 更改为 PreserveNewest。
无论如何,我很想知道如何消除这些差异。
例如,即使在使用 msbuild 构建时也将 BuildingInsideVisualStudio 设置为 true 是否是个好主意?
有什么想法吗?
附言
我们同时构建 .NET 和 Silverlight。控制台应用程序、dll 和 Web 应用程序。
【问题讨论】:
-
对此我有点惊讶 - 最近我一直在尝试设置自定义构建步骤,因为 VS 和 MSB 有不同的增量构建方法,但我认为 VisualStudio 更聪明。可能是您在某些项目中进行了一些稍微奇怪的设置,使其想要复制周围的东西
-
不要那么肯定。检查您是否有
Microsoft.WorkflowBuildExtensions.targets文件。如果你这样做 - 请放心,你的 obj 目录包含我提到的奇怪文件。接下来尝试使用诊断设置在 VS 中编译 - 你会看到 VS 抱怨项目不是最新的,因为某些文件总是复制到输出中。
标签: visual-studio visual-studio-2012 msbuild