繁体   English   中英

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

[英]Web Deploy API - deploy a .NET 4.5 application

我们正在使用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 DLL新版本号.30319)。

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

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

最简单的可能只是将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 Deploy而不是MSDeploy,例如http://technet.microsoft.com/en-us/library/dd569089.aspx和其他)和精神上映射到dotPeek输出有点帮助。

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

<IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM