"在Visual Web Developer Publish上找不到有效的AspnetMergePath"?

Ale*_*ard 24 asp.net deployment visual-web-developer publishing visual-studio

我想使用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
Run Code Online (Sandbox Code Playgroud)

这是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>
Run Code Online (Sandbox Code Playgroud)

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

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

如果重要,我的项目名称是"TestProject.NET"

感谢您的反馈.

小智 15

我遇到了同样的问题.通过所有微软相关网站搜索,发现了很多抱怨,并没有从微软修复它的意图.

在这里我是如何在我的系统中进行的.编辑Microsoft.Web.Publishing.AspNetConfigurationMerge.targets文件并添加以下行.请确保您的PC上的Microsoft SDK路径是相同的,如果没有,则更改它:

<TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\</TargetFrameworkSDKToolsDirectory>
Run Code Online (Sandbox Code Playgroud)

它应该是这样的:

  <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" />
Run Code Online (Sandbox Code Playgroud)


And*_*y K 13

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

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


tsp*_*uld 12

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

  • 当我删除尾随反斜杠时,这只适用于我.即.`/ p:AspnetMergePath ="C:\ Program Files(x86)\ Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1工具"` (4认同)