我刚安装了Visual Studio 2012的Update 2,它引入了一个新的Publish对话框。我试图让它做它以前做的事情(在发布之前预编译一个网站),我遇到了它的错误
"Can't find the valid AspnetMergePath"
从文件Microsoft.Web.Publishing.AspNetCompileMerge.targets中抛出。我已经确认文件aspnet_merge.exe存在于我的计算机上的多个位置,但是
$(GetAspNetMergePath)
由于某种原因,正在评估空字符串。我必须错过一些配置设置,但我从来没有搞过那些,所以我很困惑为什么会突然开始。
有人可以就如何解决此问题提供建议吗?我已经完成了标准的谷歌搜索这个错误,没有任何东西让我找到正确的解决方案。
答案 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(在我的案例中)。我在服务器上构建了一次应用程序,然后从那时起将其正确构建为我的持续集成项目的一部分。