我想使用Visual Web Developer Express 2010发布一个网站,使用以下设置通过FTP预编译到远程服务器:
我的第一次构建/部署似乎进展顺利,但在第二次编译后,我收到以下错误:
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”
感谢您的反馈。
答案 0 :(得分:14)
我遇到了同样的问题。通过所有微软相关网站进行搜索,发现了很多抱怨,并且微软无意修复它。
这是我在我的系统中如何使用它。编辑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" />
答案 1 :(得分:13)
您需要的是aspnet_merge.exe,该工具是作为Windows SDK的一部分分发的。它旨在预编译站点,因此您可以关闭该预编译,或安装Windows SDK的正确版本。参考是维基百科,因为有很好的链接到下载页面。你不需要下载/安装所有东西(它是巨大的),只需下载web安装程序并选择.Net工具,它将需要大约50兆字节。
请注意,与Visual Studio 2010 Windows SDK ver捆绑在一起。 7.0A无法单独下载,因此您必须在构建服务器上安装Visual Studio,或者按照“Running MSBuild fails to read SDKToolsPath”的答案中所述调整内容。
答案 2 :(得分: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版本可能需要这样做。
答案 3 :(得分:4)
所有这些内容的一种解决方法[包括必须安装SDK等]是禁用Precompile On Publish选项,即使您没有指定要合并的内容,也需要AspNetMerge存在在最终输出中。
我不遗余力地想出如何关闭它,仔细阅读选项对话框和阅读友好手册以确认我已将其关闭多年才意识到它是外面的复选框:
取消选中会对.pubxml
产生以下更改:
- <PrecompileBeforePublish>True</PrecompileBeforePublish>
- <EnableUpdateable>True</EnableUpdateable>
- <DebugSymbols>False</DebugSymbols>
- <WDPMergeOption>DonotMerge</WDPMergeOption>
这对我有用。
注意, 至关重要的是as covered here Web
(将默默通过/p:DeployOnBuild
发布)和 WebApplications
(这会产生编译器错误)%Program Files (x86)%\MSBuild\Microsoft\VisualStudio\v14.0
下的子文件夹(假设Visual Studio 2015工具)用于发布以成功生成包
答案 4 :(得分:0)
我遇到了同样的问题。
编辑Microsoft.Web.Publishing.AspNetConfigurationMerge.targets文件并添加以下行。确保使用管理员权限运行编辑器。
在我的案例VS2013中查找正确的Visual Studio Visual Studio。
64
<TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\</TargetFrameworkSDKToolsDirectory>
86
<TargetFrameworkSDKToolsDirectory>C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\</TargetFrameworkSDKToolsDirectory>
它有效!我可以编译我的项目。
答案 5 :(得分:0)
我的情况不见了。在将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行上