首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >升级到.NET 4.5后MSBuild deploy失败

升级到.NET 4.5后MSBuild deploy失败
EN

Stack Overflow用户
提问于 2012-08-19 21:14:21
回答 5查看 34.9K关注 0票数 47

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

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

"C:\Achinth\Build\Work\build\qa1sb.proj“(DeployAll目标) (1) ->"C:\Achinth\Build\Work\App\App.csproj”(ResolveReferences;(x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3847,5):目标) (2) ->(MSDeployPublish目标) -> C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3847,5):错误:->部署任务失败。((8/19/2012 6:23:41 PM)在远程计算机上处理请求时出错。)C:\Achinth\Build\Work\App\App.csprojC:\Program文件(x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3847,5):错误:\r C:\Achinth\Build\Work\App\App.csprojC:\Program文件(x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3847,5):错误:(8/19/2012 6:23:41 PM)在处理请求时出错远程计算机。\r C:\Achinth\Build\Work\App\App.csprojC:\Program文件(x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3847,5):错误:您尝试使用的应用程序池的'managedRuntimeVersion‘属性设置为'v4.0’。此应用程序需要'v4.5‘。C:\Achinth\Build\Work\App\App.csproj

查看错误,似乎是MSBuild使用的是VS2010目标,而不是VS2012,这是导致错误的原因。因为Windows 8机器没有VS 2010,所以它正确地使用了VS 2012目标。

有没有人能就如何让MSBuild选择正确的版本提供一些建议?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-20 05:11:58

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

Visual Studio2012最需要的功能之一是能够在VS2012和VS2010中打开项目(需要VS2010 SP1)。如果你还没有听说我们确实实现了这个特性。你可能想知道我们是如何做到这一点的,这可能会对你产生怎样的影响。

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

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

当您在VS2012中打开此项目时,会对您的项目文件进行一些更改,以确保它可以在VS2010 SP1和VS2012中打开。在VS2012中第一次加载项目时,对项目所做的更改之一是添加以下内容来替换导入语句。

<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,但对于VS 2010,该值并不存在。这就是为什么我们将其默认为10.0以上。在某些情况下,从命令行生成需要显式设置此属性。在我们开始之前,让我先解释一下这个属性是如何设置的(按这个顺序)

  1. 如果将VisualStudioVersion定义为环境变量/全局MSBuild属性,则使用该属性。
    • 这就是VS和VS developer命令提示符设置此value

的方式

  1. 基于.sln文件的文件格式版本(使用的工具集为-1\f25 sln file format -1\f6)-1\f25
    • -1\f6为简化此语句,将创建.sln VisualStudioVersion的VS版本的值指定为.sln -1\f25 VS-1\f6版本的值,从而构建.sln文件

如果VS 2010是installed

  • Highest-versioned子工具集版本installed

,则

  1. 选择default
    • 10.0

对于#2,当您构建.sln文件时,VisualStudioVersion的值将是.sln文件中找到的格式版本的-1。这里需要注意的重要一点是,如果构建一个.sln文件,它将使用与创建.sln文件的VS版本相对应的VisualStudioVersion值进行构建。因此,如果您在VS2012中创建一个.sln文件,并且总是构建该.sln文件,则VisualStudioVersion的值将为11.0。在许多情况下,如果您构建了.sln文件,您就很好。

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

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

在本例中,我显式地传入了属性。这将始终覆盖任何其他机制来确定VisualStudioVersion的值。如果在构建脚本中使用MSBuild任务,则可以在Properties属性或AdditionalProperties属性中指定该属性。请参阅我上一篇关于属性和AdditionalProperties之间的区别的博客文章。

如果您在构建/发布时遇到任何奇怪的行为,并且注意到导入了错误的.targets文件,那么您可能需要指定此属性。

票数 57
EN

Stack Overflow用户

发布于 2012-10-24 08:44:08

来自this link

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

<IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion> 

我在行之前添加了这行

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

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

这对我很管用。

票数 41
EN

Stack Overflow用户

发布于 2013-10-26 04:07:27

我观察到,当我使用VS2012发布Web Deploy包特性时,它会生成一个.zip文件。在压缩包中有一个名为archive.xml的文件,其中包含一个属性为‘managedRuntimeVersion=“V4.0’的createApp标记。当我使用msdeploy.exe将其同步到iis实例时,它可以正常工作。

然而,当我使用msbuild.exe创建一个web包.zip文件时,它包含一个带有'managedRuntimeVersion="v4.5"‘的archive.xml。尝试使用msdeploy.exe将此web包部署到IIS时会导致ERROR_APPPOOL_VERSION_MISMATCH错误。

正如赛义德·易卜拉欣·哈希米在这里解释的那样,将"/p:VisualStudioVersion=11.0“添加到我的msbuild.exe命令行有效地强制在结果web包的archive.xml中使用”managedRuntimeVersion=“v4.0”“,因此它解决了这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12026754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档