26

我想使用 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”

感谢您的反馈。

4

7 回答 7

15

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

这是我如何在我的系统上解决它的。编辑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:34:54.820 回答
13

这是一个不需要更改目标文件的解决方案。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:06:21.263 回答
12

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

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

于 2013-04-15T14:55:47.357 回答
4

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

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

在此处输入图像描述

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

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

这对我有用。

NB然而,至关重要的是在(假设 Visual Studio 2015 工具)下存在(这将通过惰性进行静默发布)和(这将产生编译器错误)子文件夹用于发布成功Web生成/p:DeployOnBuildWebApplications%Program Files (x86)%\MSBuild\Microsoft\VisualStudio\v14.0

于 2016-02-10T12:40:43.133 回答
1

我遇到了同样的问题。

编辑 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>

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

于 2014-09-10T13:30:56.527 回答
1

在我的情况下失踪了。它发生在将 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 行

于 2018-07-20T12:43:45.840 回答
0

更改目标框架 ...

<compilation debug="true" targetFramework="4.8"/>
<httpRuntime targetFramework="4.8"/>
于 2021-10-23T16:41:09.163 回答