![](/img/trans.png)
[英]Can I deploy a RESTful API with .Net Framework 4.5 on AWS Lambda?
[英]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.