您好我有一个使用自定义msbuild文件编译的解决方案。
最近我将我的机器从Windows 7机器更改为新的Windows 8.1机器。
在新机器上运行msbuild时,它无法构建解决方案,显然是因为它忽略了应该在其他项目之前构建的依赖项目。在我的旧机器上使用相同的文件集时不会发生这种情况。
这让我很生气 - 新机器的重点是更快地构建这个解决方案:)
有人可以建议明智的步骤来解决或至少诊断出这个问题吗?
更新:似乎msbuild认为没有变化。我收到Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
这样的邮件,我似乎无法说服它。该过程运行Clean,然后是Build,那么它怎么能不构建项目呢?
答案 0 :(得分:0)
命令提示符是调试MSBuild的最好朋友。更具体地说,Developer Command Prompt for VS2012\2013
。
验证任何以前的构建二进制文件中的构建计算机是否干净。构建脚本应在编译之前清理其工作区(除非它由构建服务器处理)。如果使用TFS,请运行tfpt
treeclean
。
使用诊断日志运行构建 - msbuild build.proj /flp:Verbosity=diagnostic;LogFile=build.log
运行不带并发的构建 - /m:1
。对于多个处理器,当/m
开关处于活动状态时,并发进程可能会使复杂构建失败。
验证是否执行了正确的MSBuild映像。强制完整路径(C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe
)。
答案 1 :(得分:0)
首先 - 由于文件是最新的,它似乎与跳过没有任何关系。
通过将构建结果输出到文本文件,我能够搜索在我的旧机器上构建时不存在的几行,包括此警告:
(ResolveAssemblyReferences target) ->
C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1635,5): warning MSB3274: The primary reference "Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL" could not be resolved because it was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0". [C:\workspaces\git\soln\src\Orchard.Web\Modules\Orchard.Workflows\Orchard.Workflows.csproj]
我们之前已经将我们的主要Web项目更新为目标.NET Framework 4.5,但解决方案中的一些项目已经保留在4.0版本上。这在我的旧机器上运行良好(4.0上留下的那些不应该引用任何针对4.5构建的内容),但显然在新机器上存在问题。
在预感中,我使用这个非常棒的工具http://visualstudiogallery.msdn.microsoft.com/47bded90-80d8-42af-bc35-4736fdd8cd13升级了解决方案中的所有项目(全部119个),之后构建成功。
我应该明确指出
无论如何 - 我希望有人读到这个并且比我更快地找到问题的根源!