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

Posted

技术标签:

【中文标题】VS 2012 发布:找不到有效的 AspnetMergePath【英文标题】:VS 2012 Publish: Can't find the valid AspnetMergePath 【发布时间】:2013-04-17 21:51:07 【问题描述】:

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

"Can't find the valid AspnetMergePath"

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

$(GetAspNetMergePath) 

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

任何人都可以提供有关如何解决此问题的建议吗?我已针对此错误进行了标准的 Google 搜索,但没有找到正确的解决方案。

【问题讨论】:

"Can't find the valid AspnetMergePath" on Visual Web Developer Publish?的可能重复 【参考方案1】:

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

这是我在系统中的工作方式。编辑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" />

【讨论】:

【参考方案2】:

我今天在使用 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 框架。

【讨论】:

除此之外没有任何效果!你知道我怎样才能为 VS 2012 永久设置它吗? 是的!谢谢!您的链接中的另一个重要观点:“MSBuild 为命令行构建选择工具集版本的方式现在与 Visual Studio 构建项目的方式相同”。如果从一开始就这样做的话,我可以节省几天的时间来追踪两者之间的细微差别。 在我们的编译机上安装了 VS2013 后遇到了同样的问题。我们让 Jenkins 启动了 msbuild 编译和网络发布任务,但它们突然停止工作。更改 Jenkins 以使用 VS2013 msbuild 修复的东西。 虽然这可能是一个很好的答案,但我不知道如何实际尝试它 - 更多细节可能会很好!知道做什么是一回事,知道怎么做完全是另一回事 现在使用 MSBuild v15 时,使用预编译配置文件时会出现此问题。【参考方案3】:

这是一个不需要更改目标文件的解决方案。 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 版本可能需要这样做。

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于VS 2012 发布:找不到有效的 AspnetMergePath的主要内容,如果未能解决你的问题,请参考以下文章

VS2012:“找不到资源编译器 DLL。请确保路径正确。”

从 VS2012 运行 SSIS 包时找不到 IsVisualStudio2012ProInstalled() 方法错误

VS2012安装失败,提示visual studio 2012 prerequisites找不到申请的对象

stdafx.h在vs2012中找不到怎样解决

VS2013 WinXP编译,找不到程序入口点

VS2012使用DirectShow时找不到qedit.h的问题