【问题标题】:MSDeploy - Cannot deploy .NET v4.5 package to v4.0 Application PoolMSDeploy - 无法将 .NET v4.5 包部署到 v4.0 应用程序池
【发布时间】:2013-11-19 00:02:54
【问题描述】:

在将 TeamCity 从一台服务器迁移到另一台服务器并切换到 Visual Studio 2013 后,使用 MSDeploy 将 TC 构建的 .zip 包推送到 IIS 时,我们的构建失败。

您尝试使用的应用程序池具有 “managedRuntimeVersion”属性设置为“v4.0”。这个应用程序 需要'v4.5'

这是一个奇怪的错误,因为我的 IIS 服务器安装了 .NET 4.5,并且已经愉快地运行和部署了数周,并且 4.0 应用程序池将运行 4.5 目标应用程序。

不幸的是,TC 和 VS (2013) 的变化弄得一团糟,所以我无法确定是什么导致了这个问题。

注意:我们的 TC 服务器上只有 Visual Studio 2012,因为我在 MSDN 上并且可以提前访问 2013。这可能是罪魁祸首,但并没有使问题变得不那么奇怪。

【问题讨论】:

    标签: iis msdeploy visual-studio-2013 clr4.0


    【解决方案1】:

    我不希望完全禁用 .NET 运行时版本检查(使用 IgnoreDeployManagedRuntimeVersion),而是通过 DeployManagedRuntimeVersion 隐式设置运行时版本:

    <DeployManagedRuntimeVersion>v4.0</DeployManagedRuntimeVersion>
    

    更多细节:http://techblog.dorogin.com/2013/11/deploying-45-projects-with-webdeploy.html

    【讨论】:

      【解决方案2】:

      打开您的.csproj 文件并设置以下元素:

      <IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion>
      

      在该元素上方添加它有助于提高可读性:

      <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
      

      感谢https://stackoverflow.com/users/1769923/abhishikt-n-jain 在这里回答这个鲜为人知的配置设置:

      MSBuild deploy failing after upgrade to .NET 4.5

      如果有人知道为什么会发生这种情况,请随时添加答案。

      【讨论】:

        【解决方案3】:

        更新

        忽略下面我的cmets。虽然它让我通过了部署,但当我实际尝试运行 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 的选项,即使在安装该版本后也是如此。但是,正如@3boysdad 的回答所示,这可以使用appcmd 实用程序在命令行上完成。

        appcmd 是管理 IIS 站点、应用程序、应用程序池等的命令行等效项。它位于 %systemroot%\system32\inetsrv\appcmd.exe 但它不在 PATH 上,如下链接所述:

        http://www.iis.net/learn/get-started/getting-started-with-iis/getting-started-with-appcmdexe#HowToUse

        我认为修改您的项目(通过IgnoreDeployManagedRuntimeVersionDeployManagedRuntimeVersion 属性)是次优的。应用程序池应设置为使用 v4.5,在 Windows Server 2008 上执行此操作的唯一方法是使用 appcmd 实用程序。 @3boysdad 的答案应该是公认的答案。

        【讨论】:

          【解决方案4】:

          在寻找同样的问题时发现了这个宝石。

          appcmd set apppool /apppool.name: <your app pool> /managedRuntimeVersion:v4.5
          

          这需要在您的 \System32\inetsrv 目录中执行。

          【讨论】:

            猜你喜欢
            • 2013-04-04
            • 2013-08-02
            • 2013-07-17
            • 2011-04-30
            • 1970-01-01
            • 2020-06-01
            • 1970-01-01
            • 2013-05-14
            • 2015-10-25
            相关资源
            最近更新 更多