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

Dav*_*lls 9 .net .net-4.0 .net-framework-version .net-4.5

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

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

Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.
Run Code Online (Sandbox Code Playgroud)

Environment.CurrentManagedThreadId是.NET Framework 4.5的新属性,因此运行4.0的服务器无法找到它.然而,我们在构建时针对.NET 4.0,因此从理论上讲,我们不应该需要有安装在生产服务器上4.5.

总结一下:

  • 项目目标4.0
  • Build server已安装4.5
  • 然后部署项目的服务器只有.NET 4.0
  • 项目在运行时因错误而失败 Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.

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

Ree*_*sey 12

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

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

有关详细信息,请参阅Marc Gravell关于此主题的博客文章.