【问题标题】:"Can't find the valid AspnetMergePath" on Visual Web Developer Publish?Visual Web Developer Publish 上的“找不到有效的 AspnetMergePath”?
【发布时间】:2012-10-03 17:27:25
【问题描述】:

我想使用 Visual Web Developer Express 2010 发布网站,使用以下设置通过 FTP 预编译到远程服务器:

  • 仅部署运行此应用程序所需的文件
  • 发布前预编译此应用程序
  • 允许网站可更新
  • 没有部署数据库
  • 网站被部署为文件层次结构,而不是 .zip 包

我的第一次构建/部署似乎进展顺利,但在第二次编译后,我收到以下错误:

Transformed web.config using C:\path_to_site\Web.Debug.config into obj\Debug\TransformWebConfig\transformed\web.config.
Copying all files to temporary location below for package/publish:
obj\Debug\AspnetCompileMerge\Source.
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.5\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets(132,5): Error : Can't find the valid AspnetMergePath

这是 Microsoft.Web.Publishing.AspNetConfigurationMerge.targets 文件内容的子集:

  <Target
      Name="GetAspNetMergePath"
      DependsOnTargets="$(GetAspNetMergePathDependsOn)"
      Condition ="'$(GetAspNetMergePath)' != 'false'">
    <PropertyGroup>
      <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" />
  </Target>

编辑:更改发布设置以在发布前删除所有现有文件毕竟不能解决问题。因此,我假设问题是本地的。

我的 web.config 中似乎没有 AspMergePath 标记。我不知道我是否应该手动添加标签。但是,我的项目中确实存在路径“obj{publish setting}\AspnetCompileMerge\Source”。

如果重要的话,我的项目名称是“TestProject.NET”

感谢您的反馈。

【问题讨论】:

  • 您是否尝试过通过“文件系统”方法发布您的网站?就像测试一样。
  • 是的。 “文件系统”发布方法遇到了同样的问题。
  • 你不应该添加任何标签('AspMergePath'),另一个测试。它是否与 ctrl + shift + W 一起运行?
  • 是的。该网站使用 ctrl + shift + W 运行得很好

标签: asp.net visual-studio deployment publishing visual-web-developer


【解决方案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" />

【讨论】:

  • 有同样的问题,这个解决方案对我很有效。即使我更喜欢@tspauld 提出的“更清洁”的那个,可悲的是,我没有设法让它在我的情况下工作。
  • 这个解决方案也对我有用,但我不知道为什么我的.targets 文件中完全没有&lt;TargetFrameworkSDKToolsDirectory&gt; 行。
  • 这也是我的解决方案。对于 .NET 4.6.2 应该是:&lt;TargetFrameworkSDKToolsDirectory&gt;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\&lt;/TargetFrameworkSDKToolsDirectory&gt;. 注意:不要错过 TargetFrameworkSDKToolsDirectory 路径末尾的反斜杠。否则无法正确合并 AspnetMergePath。
【解决方案2】:

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

【讨论】:

  • 啊 .. 没用 .. 安装了 Win8、VS 2012 和 2013,路径可能是什么 :(
  • 我注意到您还通过了 VisualStudioVersion=12.0...您不会碰巧尝试在 TFS 2012 构建服务器上使用 VS 2013 进行构建,对吗?
  • 这仅在我删除尾部反斜杠时才对我有用。 IE。 /p:AspnetMergePath="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools"
  • Windows 10 更新 - /p:AspnetMergePath="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools"
【解决方案3】:

您需要的是 aspnet_merge.exe,它是作为 Windows SDK 的一部分分发的工具。它旨在预编译站点,因此您可以关闭该预编译,或安装正确版本的Windows SDK。参考维基百科,因为下载页面的链接很好。你不需要下载/安装所有东西(它很大),只需下载网络安装程序并选择 .Net 工具,大约需要 50 兆字节。

请注意,它与 Visual Studio 2010 Windows SDK 版本捆绑在一起。 7.0A 无法单独下载,因此您必须在构建服务器上安装 Visual Studio,或者按照“Running MSBuild fails to read SDKToolsPath”的答案中所述进行调整。

【讨论】:

  • 感谢您提供的信息!不幸的是,我无法验证这个答案的正确性,因为我已经改变了项目。
  • 正确答案。即使在今天也有效。在构建服务器上,您需要安装 2015 MSBuild Tools 和 Windows 10 SDK。
【解决方案4】:

所有这些东西 [包括必须安装 SDK 等] 的一种解决方法是禁用 Precompile On Publish 选项,这需要 AspNetMerge 存在 即使您没有指定要合并的东西在最终输出中

我竭尽全力弄清楚如何关闭它,仔细研究选项对话框并阅读友好手册以确认我已经关闭了很长时间才意识到它是外面的复选框:

取消选中会对.pubxml 产生以下更改:

-    <PrecompileBeforePublish>True</PrecompileBeforePublish>
-    <EnableUpdateable>True</EnableUpdateable>
-    <DebugSymbols>False</DebugSymbols>
-    <WDPMergeOption>DonotMerge</WDPMergeOption>

这对我有用。

注意 然而,同时拥有as covered hereWeb(这将通过 /p:DeployOnBuild 惰性发布)和 WebApplications(这将产生编译器错误)%Program Files (x86)%\MSBuild\Microsoft\VisualStudio\v14.0 下存在的子文件夹(假设 Visual Studio 2015 工具)用于发布以成功生成包

【讨论】:

    【解决方案5】:

    我遇到了同样的问题。

    编辑 Microsoft.Web.Publishing.AspNetConfigurationMerge.targets 文件并添加以下行。确保以管理员权限运行编辑器。

    在我的案例 VS2013 中看起来是正确的 Visual Studio 版本。

    x64

    <TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\</TargetFrameworkSDKToolsDirectory>
    

    x86

    <TargetFrameworkSDKToolsDirectory>C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\</TargetFrameworkSDKToolsDirectory>
    

    而且它有效!我可以编译我的项目。

    【讨论】:

      【解决方案6】:

      在我的情况下失踪了。它发生在将 Visual Studio 2017 更新到 15.7.5 之后。在此之前它工作正常。我必须添加

      <TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\</TargetFrameworkSDKToolsDirectory>
      

      它位于 Microsoft.Web.Publishing.AspNetCompileMerge.targets 的第 129 行

      【讨论】:

        【解决方案7】:

        更改目标框架 ...

        <compilation debug="true" targetFramework="4.8"/>
        <httpRuntime targetFramework="4.8"/>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-18
          • 1970-01-01
          • 2011-02-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多