Web Deploy API - 部署.NET 4.5应用程序

时间:2012-11-27 11:11:06

标签: c# asp.net-mvc msbuild microsoft-web-deploy

我们正在使用Web Deploy 3的(几乎完整的未公开的)'公共API'来创建我们网站的.zip包,然后将其同步到服务器:

DeploymentBaseOptions destinationOptions = new DeploymentBaseOptions()
{
       UserName = //username,
       Password = //password,
       ComputerName = //a server
};

using (var deploymentObject = DeploymentManager.CreateObject(DeploymentWellKnownProvider.Package, "C:/MyWebsitePackage.zip"))
{
       deploymentObject.SyncParameters.Load(packageParametersFile); \\ contains some connection string information and nothing more.
       DeploymentSyncOptions syncOptions = new DeploymentSyncOptions();

       syncOptions.WhatIf = false;

       deploymentObject.SyncTo(destinationOptions, syncOptions);
}

此代码完美运行,直到我们在生产和构建服务器上安装.NET 4.5并将我们部署的项目升级到4.5。现在我们收到以下错误:

  

您尝试使用的应用程序池具有   'managedRuntimeVersion'属性设置为'v4.0'。这个应用程序   需要'v4.5'。了解更多信息:   http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_APPPOOL_VERSION_MISMATCH

我们的服务器肯定安装了.Net 4.5,而且IIS网站应用程序池版本是'.NET Framework v4.0.30319'(我知道它说v4但.NET 4.5是'就地'升级并取代4.0具有新版本号.30319的DLL。

通过添加 / p:VisualStudioVersion =,通过MSBuild.exe命令行进行部署时,可以解决此问题(不是通过创建程序包,而是通过直接同步到服务器) 11.0 标志(导致使用不同的Web应用程序目标文件,以某种方式允许部署.NET 4.5应用程序)。

有谁知道为什么Web Deploy API会这样抱怨,以及如何以与MSBuild解决方案相同的方式解决此错误?

2 个答案:

答案 0 :(得分:11)

最简单的可能只是将Microsoft.Web.Publishing.targets中的IgnoreDeployManagedRuntimeVersion属性包含到.csproj中,或者在/ t:package步骤中将其作为MSBuild的参数。其他选项可能是项目根目录中的parameters.xml,以使managedRuntimeVersion可以使用MSDeploy参数进行覆盖,或者直接在archive.xml中的.zip中将其设置为预部署步骤。

更新(回复评论时间太长):

嗯,这不像VS 2012本身那么糟糕。从VS(Web部署选项)发布到IIS并且它将生成的包将是临时文件夹和参数xml的内容,而不是在执行通用打包时获得的zip,并且将设置运行时版本到4即使项目是4.5。 IgnoreDeployManagedRuntimeVersion只是完全省略它。如果您从VS执行Web Deploy Package选项,您将在archive.xml中获得4.5的zip,如果您尝试直接手动将VS输出的​​zip导入IIS,您将获得4.0 vs 4.5 app pool的错误弹出窗口错误,与从运行msbuild / t:package和msdeploy:从命令行同步获得的错误相同。 VS(devenv)不会“正确”执行,它会悄悄地覆盖项目设置,而不是MSDeploy的错误,因为版本是在编译/打包期间设置的(MSBuild / devenv)而不是在部署期间。

顺便说一句,重新学习API文档,是的,它们实际上是不存在的,但是我发现命令行文档是可以容忍的(称为Web部署而不是MSDeploy,例如http://technet.microsoft.com/en-us/library/dd569089.aspx和其他)并且将这些文档映射到dotPeek输出有助于小。

答案 1 :(得分:4)

您可以尝试将其添加到您的项目中:

<IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion>