我在TeamCity上构建了一个Web项目,可以为以后的部署打包,目前正在使用MSBuild 2013.当我最近推送一些代码时,我遇到了构建错误(因为我使用了一些C#6功能)所以我去改变构建配置以使用MSBuild 2015而得到了这个错误:
docker run -v /user-service/code:/code tools other_command.py
之前在其他问题中已经提到过此错误(例如:VS 2012 Publish: Can't find the valid AspnetMergePath),但不幸的是,这些问题中提到的修复都没有对我有用。
我已经尝试或已经是这样的事情:
[Error] C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets(132, 5): Can't find the valid AspnetMergePath
来
<TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\</TargetFrameworkSDKToolsDirectory>
档案Microsoft.Web.Publishing.AspNetCompileMerge.targets
添加到MSBuild命令我对这一点感到有些失落:我尝试的唯一一件事就是在构建服务器上安装Visual Studio,但我真的很想避免这样做如果可以的话(因为我觉得你应该在CI服务器上安装一个完整的IDE是荒谬的!)。
进一步的信息:
答案 0 :(得分:6)
最初在VS 2012 Publish: Can't find the valid AspnetMergePath上提出的第二个和第三个解决方案实际上都有效,但必须提供正确版本的SDK工具。
原始文章(VS 2012 Publish: Can't find the valid AspnetMergePath)是在2013年编写的,涵盖了Visual Studio 2012.支持C#6.0和.NET 4.6的 aspnet_merge.exe 不是找到的那篇在路径RemoteJob
下。
为了使第三个解决方案有效,请使用以下路径"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\"
。
或者说,将 "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\"
添加到MSBuild命令可以解决问题。
我的团队与您描述的问题完全相同,并将此参数添加到MSBuild步骤,立即修复它。 (我当然假设您的构建计算机上有NETFX 4.6版本的工具。)
作为旁注,由于您说您使用Team City - 而不是直接将上述参数添加为命令行参数,您可以使用建议的团队城市和configure the corresponding build parameter。
答案 1 :(得分:1)
接受的答案只是症状治疗,并没有解决潜在的问题。请使用diagnostic logging运行MSBuild。如果您查看Microsoft.Web.Publishing.AspNetCompileMerge.targets
,您会看到它尝试将TargetFrameworkSDKToolsDirectory
与AspnetMergeName
连接起来。如果您在MSBuild日志中搜索,您会发现TargetFrameworkSDKToolsDirectory
为空。 TargetFrameworkSDKToolsDirectory
是从TargetFrameworkSDKDirectory
构建的,也是空的。
这就是你需要解决的问题。就我而言:
/configuration/msbuildToolsets/toolset/property[@name="FrameworkSDKRoot]
中的Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\NETFXSDK\4.6.1@InstallationFolder
确定的。在我的情况下,此节点仅在WOW6432Node
中可用,它也需要在64位注册表中可用。您需要将节点复制到64位注册表中的等效位置。