MSBuild 2015发布:找不到有效的AspnetMergePath

Ric*_*ban 9 c# msbuild teamcity visual-studio-2015

我在TeamCity上构建了一个Web项目,可以为以后的部署打包,目前正在使用MSBuild 2013.当我最近推送一些代码时,我遇到了构建错误(因为我使用了一些C#6功能)所以我去改变了使用MSBuild 2015的构建配置,并收到此错误:

[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

之前在其他问题中已经提到过此错误(例如:VS 2012发布:找不到有效的AspnetMergePath),但遗憾的是,这些问题中提到的修复都没有对我有用.

我已经尝试或已经是这样的事情:

  • 来自本地计算机的Web和WebApplication目录(位于C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v14.0)已被复制到构建服务器(它们一直在那里)
  • 添加 <TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\</TargetFrameworkSDKToolsDirectory>Microsoft.Web.Publishing.AspNetCompileMerge.targets文件
  • 添加/p:AspnetMergePath="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\"到MSBuild命令

我对这一点感到有点失落:我唯一没有尝试过的就是在构建服务器上安装Visual Studio,但是如果可以的话,我真的很想避免这种情况(因为我认为这很荒谬)您应该在CI服务器上安装完整的IDE!).

更多信息:

  • 如果你将构建切换回MSBuild 2013,一切都会继续正常工作(尽管很明显,我们不想在过去被卡住)
  • 我们有许多其他纯粹的编译版本,它们针对MSBuild 2015运行而没有任何错误

iro*_*cev 6

最初在VS 2012上发布的第二个和第三个解决方案发布:无法找到有效的AspnetMergePath实际上可以正常工作,但必须提供正确版本的SDK工具.

原始文章(VS 2012发布:找不到有效的AspnetMergePath)是在2013年编写的,涵盖了Visual Studio 2012. 支持C#6.0和.NET 4.6 的aspnet_merge.exe不是在路径下找到的"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\".

换句话说,添加 /p:AspnetMergePath="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\" 到MSBuild命令可以解决问题.

我的团队与您描述的问题完全相同,并将此参数添加到MSBuild步骤,立即修复它.(我当然假设您的构建计算机上有NETFX 4.6版本的工具.)

作为旁注,由于您说您使用Team City - 而不是直接将上述参数添加为命令行参数,您可以使用建议的Team City并配置相应的构建参数.

  • 我不得不添加一个更具体的合并路径,以使其在VS15上运行.我使用`/ p:AspnetMergePath ="C:\ Program Files(x86)\ Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\aspnet_merge.exe"`指定实际,而不只是路径. (4认同)