首页 文章

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

提问于
浏览
12

我们正在使用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命令行进行部署(不是通过创建程序包,而是通过直接同步到服务器) resolve this issue 以某种方式允许部署.NET 4.5应用程序) .

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

2 回答

  • 4

    最简单的可能只是将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输出有点帮助 .

  • 11

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

    <IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion>
    

相关问题