安装了 .NET 4.5 的构建服务器能否成功地将针对 4.0 的项目部署到仅安装了 .NET 4.0 的服务器?

Posted

技术标签:

【中文标题】安装了 .NET 4.5 的构建服务器能否成功地将针对 4.0 的项目部署到仅安装了 .NET 4.0 的服务器?【英文标题】:Can a build server with .NET 4.5 installed successfully deploy a project targeting 4.0 to a server with only .NET 4.0 installed? 【发布时间】:2013-01-28 07:44:37 【问题描述】:

我们最近在我们的持续集成构建服务器上安装了 .NET 4.5,以便它可以支持利用 .NET 4.5 功能的新项目。此构建服务器还用于构建和部署较旧的项目,其中一些针对 .NET 4.0。

在此服务器上构建以 .NET 4.0 为目标的项目,然后部署到仅安装了 .NET 4.0 的目标服务器现在失败并出现以下错误:

Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.

Environment.CurrentManagedThreadId 是 .NET Framework 4.5 的新属性,因此运行 4.0 的服务器找不到它是有道理的。但是,我们在构建时以 .NET 4.0 为目标,因此理论上我们不应该需要在生产服务器上安装 4.5。

总结一下:

项目目标 4.0 构建服务器已安装 4.5 随后部署项目的服务器只有 .NET 4.0 项目在运行时失败并出现错误Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.

什么给了?当 .NET 4.5 的服务器构建 dll 时,是否可以在仅安装 .NET 4.0 的服务器上成功运行 .NET 4.0 dll?

【问题讨论】:

【参考方案1】:

出现这种情况是因为 4.5 是对 4.0 的就地升级。当构建服务器编译时,默认情况下,即使您的目标是 .NET 4,它也会找到 4.5 程序集。

您可以更正此问题,但您需要将 4.0 引用程序集添加到构建服务器(以便编译器找到它们),而不仅仅是依赖 .NET 4.5 版本。

详情请见Marc Gravell's blog post on the subject。

【讨论】:

谢谢,那篇博文似乎描述了我们遇到的确切问题。但是,据我们所知,构建服务器确实已经拥有 4.0 参考程序集,所以我们仍然不确定出了什么问题。 @DavidMills 一般来说,如果你打算以 4.0 为目标,我实际上强烈建议不要在构建服务器上安装 4.5。在这个就地升级中有太多的重大变化。话虽如此,如果 ref 程序集位于正确的位置,它应该可以工作。 谢谢,里德。我们已经着手设置了一个 Jenkins 构建从属服务器来支持针对 4.0 的项目。这很不幸,但似乎是必要的。希望微软在发布另一个 .NET 版本作为就地升级之前三思而后行。 “希望微软在发布另一个 .NET 版本作为就地升级之前三思而后行”...您好 .NET 4.5.1! 您的回答引起了一些unnecessary angst,您可能需要注释一下。

以上是关于安装了 .NET 4.5 的构建服务器能否成功地将针对 4.0 的项目部署到仅安装了 .NET 4.0 的服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows Server 2008 R1 上安装 .NET Framework 4.5 参考库?

升级到 .NET 4.5 后获取 AddressAlreadyInUseException

arcgis安装不了为啥

在 .Net 4.5 中使用 Websocket 的示例 [关闭]

传输了几条消息后,ASP.NET MVC 4.5 WebSocket 服务器失去连接

XSP 可以运行 ASP.NET 4.5 吗?