可以成功安装.NET 4.5的构建服务器将面向4.0的项目部署到仅安装了.NET 4.0的服务器吗?

时间:2013-02-12 21:23:00

标签: .net .net-4.0 .net-4.5 .net-framework-version

我们最近在我们的持续集成构建服务器上安装了.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 个答案:

答案 0 :(得分:12)

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

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

有关详细信息,请参阅Marc Gravell's blog post on the subject