VS 2012发布:找不到有效的AspnetMergePath

18

我刚刚安装了Visual Studio 2012的更新2,引入了一个新的发布对话框。我正在尝试让它做以前做过的事情(在发布之前预编译网站),但是我遇到了错误提示:

"Can't find the valid AspnetMergePath"

这个问题是从文件Microsoft.Web.Publishing.AspNetCompileMerge.targets抛出的。我确认了aspnet_merge.exe文件在我的电脑上存在多个位置,但是

$(GetAspNetMergePath) 

出于某些原因,它正在评估为空字符串。我一定漏掉了一些配置设置,但我以前从未碰过这些设置,所以我很困惑为什么会突然开始出现这种情况。

有人能提供解决方法吗?我已经在Google上搜索了这个错误,但没有找到正确的解决方案。


5个回答

19
我遇到了同样的问题。搜索了所有与微软相关的网站,发现有很多抱怨,但微软没有意图修复它。
以下是我在我的系统上解决它的方法。编辑Microsoft.Web.Publishing.AspNetConfigurationMerge.targets文件并添加以下行。请确保Microsoft SDK路径在您的计算机上相同,如果不同,请更改它:
<TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\</TargetFrameworkSDKToolsDirectory>

这是它应该的样子:
  <Target
  Name="GetAspNetMergePath"
  DependsOnTargets="$(GetAspNetMergePathDependsOn)"
  Condition ="'$(GetAspNetMergePath)' != 'false'">
<PropertyGroup>
  <TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\</TargetFrameworkSDKToolsDirectory>
  <AspnetMergeName>aspnet_merge.exe</AspnetMergeName>
  <AspnetMergePath Condition="Exists('$(TargetFrameworkSDKToolsDirectory)$(AspnetMergeName)')">$(TargetFrameworkSDKToolsDirectory)</AspnetMergePath>
</PropertyGroup>
<Error Condition="'$(AspnetMergePath)' == '' Or !Exists($(AspnetMergePath))"
       Text="Can't find the valid AspnetMergePath" />


17
今天我在使用msbuild命令行进行构建时遇到了相同的问题。解决方法是使用位于C:\Program Files (x86)\MSBuild\12.0\Bin而不是C:\Windows\Microsoft.NET\Framework\v4.0.30319中的msbuild.exe。
问题的原因是新的msbuild现在是Visual Studio 2013的一部分,而不再是.Net Framework。

什么都不管用,只有这个有效! 你知道如何在VS 2012中永久设置它吗? - manishKungwani
太好了!谢谢!从您提供的链接中,另一个重要的点是:“现在,MSBuild为命令行构建选择工具集版本的方式与Visual Studio构建项目的方式完全相同”。如果一开始就这样做,我本可以节省几天时间去追踪两者之间的细微差异。 - Nelson Rothermel
在我们的编译机安装了VS2013之后遇到了同样的问题。我们使用Jenkins启动msbuild编译和Web发布任务,但突然间它们停止工作了。将Jenkins更改为使用VS2013的msbuild可以解决问题。 - Jeff Dege
2
虽然这可能是一个很好的答案,但我不知道如何实际尝试它 - 更多的细节可能会更好!知道该做什么是一回事,知道如何做是完全另一回事。 - Jon Story
现在使用预编译配置文件时,使用MSBuild v15会出现这个问题。 - Piotr Kula

6
这里有一个解决方案,不需要更改目标文件。来自http://connect.microsoft.com/VisualStudio/feedback/details/786492/publish-cant-find-the-valid-aspnetmergepath的解决方法建议向msbuild传递附加属性。我成功地使用以下内容:

msbuild website.publishproj /p:DeployOnBuild=true /p:PublishProfile=Release /p:VisualStudioVersion=12.0 /p:AspnetMergePath="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\"

关键在于 AspnetMergePath 属性,如果 Windows SDK 安装在不同位置,则可能需要更改该属性。包括 workaround 中的 GetAspNetMergePath 属性会导致失败,但根据 SDK 版本的不同可能需要使用它。

2

我在VS 2012中遇到了同样的问题,解决方法如下:

点击发布,在“发布Web”下选择“设置”选项卡, 取消勾选“发布期间预编译”。


0

对于我而言,解决这个错误的另一个选择是安装Visual Studio(在我的情况下是Express)。我先在服务器上构建了应用程序,然后从那时起,它就能够正确地作为我的持续集成项目的一部分进行构建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接