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

时间:2013-04-17 21:51:08

标签: asp.net visual-studio-2012 publish

我刚安装了Visual Studio 2012的Update 2,它引入了一个新的Publish对话框。我试图让它做它以前做的事情(在发布之前预编译一个网站),我遇到了它的错误

"Can't find the valid AspnetMergePath"

从文件Microsoft.Web.Publishing.AspNetCompileMerge.targets中抛出。我已经确认文件aspnet_merge.exe存在于我的计算机上的多个位置,但是

$(GetAspNetMergePath) 
由于某种原因,

正在评估空字符串。我必须错过一些配置设置,但我从来没有搞过那些,所以我很困惑为什么会突然开始。

有人可以就如何解决此问题提供建议吗?我已经完成了标准的谷歌搜索这个错误,没有任何东西让我找到正确的解决方案。

5 个答案:

答案 0 :(得分:18)

我遇到了同样的问题。通过所有微软相关网站进行搜索,发现了很多抱怨,并且微软无意修复它。

这是我在我的系统中如何使用它。编辑Microsoft.Web.Publishing.AspNetConfigurationMerge.targets文件并添加以下行。请确保您的PC上的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" />

答案 1 :(得分:17)

我在使用msbuild命令行构建时遇到了同样的问题。修复是在C:\ Program Files(x86)\ MSBuild \ 12.0 \ Bin中使用msbuild.exe 而不是来自C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319

问题是由于新的msbuild现在是part of visual studio 2013而不再是.Net框架。

答案 2 :(得分: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工具\“

此处的关键是AspnetMergePath属性,如果Windows SDK安装在其他位置,则可能需要更改该属性。如果我在变通方法中包含GetAspNetMergePath属性,则会失败,但根据SDK版本可能需要这样做。

答案 3 :(得分:1)

我在VS 2012中遇到了同样的问题,我所做的就是以下内容:

单击“发布”,在“发布Web”下,转到“设置”选项卡, 取消选中“在发布期间预编译。”

答案 4 :(得分:0)

另一个对我有同样错误的选项是安装Visual Studio(在我的案例中)。我在服务器上构建了一次应用程序,然后从那时起将其正确构建为我的持续集成项目的一部分。

相关问题