升级到.NET 4.5后MSBuild部署失败

我们最近将VS 2010和.NET 4应用程序升级到VS 2012和.NET 4.5。 我们有一个构build脚本来在testing服务器上部署应用程序。 我们有两个盒子 – 一个是VS 2012(全新安装)的Windows 8,另一个是VS 2010和VS 2012(新安装)的Windows 7。

从Windows 8运行构build脚本时,构build脚本运行良好,并将应用程序部署到testing服务器。 但是,从Windows 7中部署应用程序时,出现以下错误:

(1) – >“C:\ Achinth \ Build \ Work \ App \ App.csproj”(ResolveReferences; MsDeployPublish target)(2)“C:\ Achinth \ Build \ Work \ build \ qa1sb.proj”(DeployAll target) – >(MSDeployPublish target) – > C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets(3847,5):错误:Web部署任务失败。 (8/19/2012 6:23:41 PM)在远程计算机上处​​理请求时发生错误。)[C:\ Achinth \ Build \ Work \ App \ App.csproj] C:\ Program Files(x86 )\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets(3847,5):error:\ r [C:\ Achinth \ Build \ Work \ App \ App.csproj] C:\程序文件(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets(3847,5):错误:(2012年8月19日6:23:41 PM)在远程计算机上处​​理该请求。\ C [\ Program Files \ x86 \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Web.Publishing.targets(3847,5):错误:应用程序池t 您尝试使用的帽子的“managedRuntimeVersion”属性设置为“v4.0”。 这个应用程序需要“v4.5”。 [C:\ Achinth \build立\工作\软件\ App.csproj]

看看这个错误,它看起来像MSBuild使用VS 2010目标,而不是VS 2012,这是导致错误。 由于Windows 8中没有VS 2010,因此正确使用VS 2012的目标。

有人可以提供关于如何使MSBuildselect正确的版本的指针?

在这种情况下,您将需要指定MSBuild属性VisualStudioVersion = 11.0。 我只是在http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx上发表了博客,为了您的方便,我也在下面粘贴了它。;

Visual Studio 2012最受欢迎的function之一是能够在VS 2012和VS 2010(需要VS 2010 SP1)中打开项目。 如果你还没有听说过,我们确实实现了这个function。 您可能想知道我们如何做到这一点,以及这可能会如何影响您。

如果您打开在VS2010中创build的Web项目的.csproj / .vbproj,您将看到以下导入语句。

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

在VS 2012中打开此项目时,对项目文件进行了一些更改,以确保可以在VS 2010 SP1和VS 2012中打开该项目。在VS 2012中首次加载时对项目所做的更改之一是添加以下来replace该导入语句。

 <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中构build时,此值始终为11.0,但对于VS 2010,则不存在。 这就是为什么我们把它拖到10.0以上。 有些情况下,从命令行构build需要明确设置此属性。 在我们到达那里之前,让我解释一下这个属性是如何设置的(按此顺序)

  1. 如果将VisualStudioVersion定义为环境variables/全局MSBuild属性,则使用该属性。
    • 这是如何VS和VS开发人员命令提示符设置此值
  2. 基于.sln文件的文件格式版本(使用的工具集是sln文件格式-1)
    • 为了简化这个语句,.sln文件将通过将VisualStudioVersion指定为创build.sln文件的VS版本的值来构build。
  3. select默认
    • 10.0如果VS 2010安装
    • 安装了最高版本的子工具集版本

对于构build.sln文件时的#2,VisualStudioVersion的值将是在.sln文件中find的格式版本的-1。 这里需要注意的重要一点是,如果你build立一个.sln文件,它将会build立与创build.sln文件的VS版本相对应的VisualStudioVersion的值。 因此,如果您在VS2012中创build.sln文件,并且始终构build该.sln文件,则VisualStudioVersion的值将为11.0。 在许多情况下,如果你build立.sln文件,你是好的。

如果您正在构build.sproj / .vbproj文件而不通过.sln文件? 如果从命令行(而不是开发人员提示)构buildWeb项目,则VisualStudioVersion的值将为10.0。 这是我上面显示的属性的人造物。 在这种情况下,您应该将其作为MSBuild属性传入。 例如

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

在这种情况下,我明确地通过属性。 这将始终覆盖任何其他机制来确定VisualStudioVersion的值。 如果在构build脚本中使用MSBuild任务,则可以在“属性”属性或“附加属性”属性中指定该属性。 查看我以前的博客post,了解Properties和AdditionalProperties之间的区别。

如果在构build/发布时遇到任何有趣的行为,并且您注意到正在导入错误的.targets文件,则可能需要指定此属性。

从这个链接 。

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

 <IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion> 

我在行之前加了一行

 <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> 

而且它没有错误地部署。“

它为我工作。

我观察到,当我使用VS2012发布Web部署包function时,它会生成一个.zip文件。 在该zip文件中,有一个名为archive.xml的文件,其中包含一个具有“managedRuntimeVersion =”v4.0“”属性的createApp标记。 当我使用msdeploy.exe将其同步到一个iis实例时,它可以工作。

但是,当我使用msbuild.exe创build一个web包.zip文件时,它包含一个archive.xml,其中包含'managedRuntimeVersion =“v4.5”'。 尝试使用msdeploy.exe将此Web包部署到IIS会导致ERROR_APPPOOL_VERSION_MISMATCH错误。

正如Sayed Ibrahim Hashimi在这里解释的,在我的msbuild.exe命令行中添加“/p:VisualStudioVersion=11.0”可以有效地在生成的web包的archive.xml文件中强制managedRuntimeVersion =“v4.0”,以便解决问题。

对于任何人发现此网页search为什么msdeploy / webdeploy显示类似的错误,我发现这是解决scheme。

要解决该问题,只需将DeployManagedRuntimeVersion属性添加到您的VS项目中:

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

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

在我的情况下,WebDeploy未安装在构build服务器上。 所以它抛出了类似的错误。 我安装了WebDeploy,而且我是金手指。

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