18

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

"Can't find the valid AspnetMergePath"

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

$(GetAspNetMergePath) 

由于某种原因正在评估一个空字符串。我一定错过了一些配置设置,但我以前从来没有弄乱过这些设置,所以我很困惑为什么会突然开始。

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

4

5 回答 5

19

我遇到了同样的问题。搜索了所有与微软相关的网站,发现很多投诉,微软无意修复它。

这是我如何在我的系统上解决它的。编辑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" />

于 2013-05-22T14:44:39.357 回答
17

我今天在使用 msbuild 命令行构建时遇到了同样的问题。解决方法是使用 C:\Program Files (x86)\MSBuild\12.0\Bin 中的 msbuild.exe,
而不是 C:\Windows\Microsoft.NET\Framework\v4.0.30319

这个问题是由于新的 msbuild 现在是 Visual Studio 2013 的一部分,而不是 .Net 框架的一部分。

于 2014-05-05T06:47:52.057 回答
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 版本可能需要这样做。

于 2014-01-08T19:08:11.853 回答
2

我在 VS 2012 中遇到了同样的问题,我所做的只是:

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

于 2016-06-10T11:36:53.580 回答
0

另一个对我有用的相同错误的选项是安装 Visual Studio(在我的情况下是 express)。我在服务器上构建了一次应用程序,然后从那时起,它作为我的持续集成项目的一部分正确构建。

于 2015-05-17T23:25:30.187 回答