MSBuild的部署升级到.NET 4.5后失败(MSBuild deploy failing af

2019-06-27 03:47发布

我们最近升级了VS 2010和.NET 4的应用VS 2012和.NET 4.5。 我们有一个构建脚本来部署在测试服务器上的应用程序。 我们有两个箱子 - 一个是Windows 8中使用VS 2012(全新安装)等是Windows 7中使用VS 2010和VS 2012(新安装)。

从Windows 8盒构建脚本运行构建脚本运作良好,应用程序部署到测试服务器。 但是,从Windows 7盒部署应用程序时,我得到了以下错误:

“C:\ Achinth \构建\工作\构建\ qa1sb.proj”(DeployAll目标)(1) - > “C:\ Achinth \构建\工作\ APP \ App.csproj”(ResolveReferences; MsDeployPublish目标)(2) - >(MSDeployPublish目标) - > C:\ Program Files文件(x86)的\的MSBuild \微软\ VisualStudio的\ V10.0 \网络\ Microsoft.Web.Publishing.targets(3847,5):错误:Web部署任务失败(。 (2012年8月19日下午6点23分41秒)时,请求在远程计算机上进行处理时发生错误)[C:\ Achinth \构建\工作\ APP \ App.csproj]。C:\程序文件(x86 )\的MSBuild \微软\ VisualStudio的\ V10.0 \网络\ Microsoft.Web.Publishing.targets(3847,5):错误:\ r [C:\ Achinth \建立\工作\软件\ App.csproj] C:\程序文件(x86)\的MSBuild \微软\ VisualStudio的\ V10.0 \网络\ Microsoft.Web.Publishing.targets(3847,5):错误:(2012年8月19日下午6时23分41秒)时出错该请求是在远程计算机上处​​理\ r [C:\ Achinth \建立\工作\软件\ App.csproj] C:\ Program Files文件(x86)的\的MSBuild \微软\ VisualStudio的\ V10.0 \网络\微软。 Web.Publishing.targets(3847,5):错误:应用程序池ŧ 你要使用的帽子有“managedRuntimeVersion”属性设置为“V4.0”。 此应用程序需要“V4.5”。 [C:\ Achinth \建立\工作\软件\ App.csproj]

看着它看起来像的MSBuild错误使用VS 2010年的目标,而不是VS 2012,这是造成错误。 由于Windows 8框没有VS 2010是正确使用VS 2012吨的目标。

可有一个人请提供关于如何使MSBuild的选择是正确的版本的指针?

Answer 1:

在这种情况下,你需要指定的MSBuild属性VisualStudioVersion = 11.0。 我的博客上讲述这个在http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx ,我已经粘贴下面它也为您提供方便。

其中一个的Visual Studio 2012的最需要的功能是在两个VS 2012和VS 2010中打开项目的能力(需要VS 2010 SP1)。 如果你还没有听说过,我们没有实现该功能。 你可能会问,我们如何能够做到这一点,这可能会如何影响你。

如果打开的.csproj / .vbproj在VS2010中创建一个Web项目,你会看到下面的import语句。

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\
                  v10.0\WebApplications\Microsoft.WebApplication.targets" />

当您打开VS该项目2012有你的项目文件做了一些改动,以确保它可以同时在VS 2010 SP1中打开和VS 2012年一对项目所做的更改,当它在2012 VS第一次加载是添加如下,以取代import语句。

<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">
    $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

我们删除了硬编码10.0,而是使用的属性VisualStudioVersion。 在Visual Studio 2012建立在该值将永远是11.0,而2010年VS它不存在。 这就是为什么我们把它默认为10.0以上。 有一些场景中通过命令行建立需要明确设置该属性。 我们到那里之前,让我解释一下这个属性被设置方式(按照这个顺序)

  1. 如果VisualStudioVersion被定义为环境变量/全球的MSBuild属性,即使用。
    • 这是VS和VS开发商命令提示符如何设置这个值
  2. 基于.sln文件的文件格式版本(使用工具集是SLN文件格式-1)
    • 为了简化这一说法,.sln文件将建立与指定VisualStudioVersion于VS的这创造.sln文件的版本值。
  3. 选择默认
    • 10.0如果VS 2010安装
    • 安装最高版本的子版本的工具集

#2,当你正在建设一个.sln文件VisualStudioVersion的价值将在.sln文件中找到的格式版本-1。 这里要注意的重要一点是,如果你建立一个.sln文件,将建立与VisualStudioVersion对应VS的这创造.sln文件的版本值。 所以,如果你在创建一个VS2012 .sln文件,你总是会建立一条.sln文件的价值VisualStudioVersion将是11.0。 在许多情况下,如果你建立.sln文件你都不错。

如果您正在构建的.csproj / .vbproj文件W / O通过.sln文件去? 如果你建立在命令行(而不是开发者的提示)的Web项目,然后用于VisualStudioVersion值将为10.0。 那是我上述显示特性的伪影。 在这种情况下,你应该通过这个作为一个MSBuild属性。 例如

msbuild.exe MyAwesomeWeb.csproj /p:VisualStudioVersion=11.0

在这种情况下,我传递的财产作了明确规定。 这将始终覆盖任何其他机制来确定VisualStudioVersion值。 如果您使用的是一个构建脚本的MSBuild任务,那么你可以指定在属性属性或属性AdditionalProperties的财产。 查看属性和AdditionalProperties之间的差异我以前的博客文章。

如果你构建/发布时遇到任何可笑的行为和您发现了错误.targets文件被导入,那么你可能需要指定此属性。



Answer 2:

从这个链接 。

“打开你的*的.csproj或* .vbproj web项目文件在文本编辑器,并添加以下行。

<IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion> 

我增加了行只是前行

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

并将其部署没有错误“。

它为我工作。



Answer 3:

我发现,当我使用VS2012发布Web部署软件包的功能,它会生成一个.zip文件。 内部的拉链有一个名为archive.xml包含与属性“managedRuntimeVersion =‘V4.0’”一个createApp标签文件。 当我使用msdeploy.exe将其同步到IIS实例,它的工作原理。

然而,当我使用msbuild.exe来创建Web包.zip文件,它包含有“managedRuntimeVersion =‘V4.5’”的archive.xml。 尝试部署使用的ERROR_APPPOOL_VERSION_MISMATCH错误msdeploy.exe结果这个网络包IIS。

正如赛义德·易卜拉欣·哈希米解释这里,加入“/p:VisualStudioVersion=11.0”我msbuild.exe命令行有效势力managedRuntimeVersion =‘V4.0’'中所产生的网络包的archive.xml所以它解决了问题。



Answer 4:

对于任何人谁找到了这个网页搜索为什么msdeploy / webdeploy显示了类似的错误,我发现这是解决方案。

要解决这个问题,只需添加DeployManagedRuntimeVersion财产到您的VS-项目:

<targetframeworkversion>v4.5</TargetFrameworkVersion></code>
<DeployManagedRuntimeVersion>v4.0</DeployManagedRuntimeVersion>

从这里: http://techblog.dorogin.com/2013/11/deploying-45-projects-with-webdeploy.html



Answer 5:

在我的情况WebDeploy没有安装在构建服务器。 因此,它扔了一个类似的错误。 我安装WebDeploy,我是金色的。

http://www.microsoft.com/en-ca/download/confirmation.aspx?id=25230



文章来源: MSBuild deploy failing after upgrade to .NET 4.5