将TeamCity从一台服务器迁移到另一台服务器并切换到Visual Studio 2013后,当使用MSDeploy将TC构建的.zip包推送到IIS时,我们的构建失败。
您尝试使用的应用程序池具有 "托管运行时版本"属性设置为"v4.0"。此应用程序 需要"v4.5"
这是一个奇怪的错误,因为我的 IIS 服务器安装了 .NET 4.5,并且已经愉快地运行和部署了数周,并且 4.0 应用程序池将运行针对 4.5 的应用程序。
不幸的是,TC和VS(2013)的变化使水变得浑浊,因此我无法确定导致问题的原因。
注意:我们的TC服务器只有Visual Studio 2012,因为我使用的是MSDN,并且可以提前访问2013。这可能是罪魁祸首,但并没有使问题变得不那么奇怪。
我宁愿根本不禁用.NET运行时版本检查(使用IgnoreDeployManagedRuntimeVersion),而是通过DeployManagedRuntimeVersion隐式设置运行时版本:
<DeployManagedRuntimeVersion>v4.0</DeployManagedRuntimeVersion>
更多细节: http://techblog.dorogin.com/2013/11/deploying-45-projects-with-webdeploy.html
打开.csproj
文件并设置以下元素:
<IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion>
将其添加到此元素的正上方有助于提高可读性:
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
感谢 https://stackoverflow.com/users/1769923/abhishikt-n-jain 在这里回答这个鲜为人知的配置设置:
升级到 .NET 4.5 后,MSBuild 部署失败
如果有人知道为什么会发生这种情况,请随时添加答案。
更新
忽略我在下面的评论。 虽然它让我通过了部署,但当我实际尝试运行 Web 应用程序时,我得到了一个503 Service Unavailable
。 我通过将 managedRuntimeVersion
属性设置回 v4.0 并将IgnoreDeployManagedRuntimeVersion
添加到我的项目中来放弃此更改。 然后部署成功,应用正常工作。 哑。。。
在Windows Server 2008 R2 SP1机器上安装.NET Framework 4.5.1(作为升级Powershell的一部分)后,这种情况发生在我身上。
Windows Server 2008 上的 IIS 用户界面不提供将 managedRuntimeVersion
属性设置为 v4.5 的选项,即使在安装了该版本之后也是如此。 但是,这可以使用appcmd
实用程序在命令行上完成,如@3boysdad的答案所示。
appcmd
是命令行等效于管理 IIS 站点、应用程序、应用程序池等。 它位于%systemroot%system32inetsrvappcmd.exe
但不在 PATH 上,如以下链接所示:
http://www.iis.net/learn/get-started/getting-started-with-iis/getting-started-with-appcmdexe#HowToUse
我认为修改您的项目(通过IgnoreDeployManagedRuntimeVersion
或DeployManagedRuntimeVersion
属性)是次优的。 应用程序池应设置为使用 v4.5,在 Windows Server 2008 上执行此操作的唯一方法是使用 appcmd
实用工具。 @3boysdad的答案应该是公认的答案。
在寻找同样的问题时发现了这个宝石。
appcmd set apppool /apppool.name: <your app pool> /managedRuntimeVersion:v4.5
这将需要在 \System32\inetsrv 目录中执行。