安装了.NET 4.5的生成服务器能否成功地将目标为4.0的项目部署到只安装了.NET 4.0的服务器上?

安装了.NET 4.5的生成服务器能否成功地将目标为4.0的项目部署到只安装了.NET 4.0的服务器上?,.net,.net-4.0,.net-4.5,.net-framework-version,.net,.net 4.0,.net 4.5,.net Framework Version,我们最近在我们的持续集成构建服务器上安装了.NET4.5,以便它能够支持利用.NET4.5功能的新项目。此生成服务器还用于生成和部署较旧的项目,其中一些项目的目标是.NET 4.0 在此服务器上构建目标.NET 4.0,然后部署到仅安装了.NET 4.0的目标服务器的项目现在失败,出现以下错误: Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'. Environment.CurrentManage

我们最近在我们的持续集成构建服务器上安装了.NET4.5,以便它能够支持利用.NET4.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的服务器找不到它是有道理的。但是,我们在构建时以.NET4.0为目标,因此理论上我们不需要在生产服务器上安装4.5

总而言之:

  • 项目目标4.0
  • 生成服务器已安装4.5
  • 然后部署项目的服务器只有.NET 4.0
  • 项目在运行时失败,错误
    未找到方法:“Int32 System.Environment.get_CurrentManagedThreadId()”。

有什么好处?当DLL由安装了.NET 4.5的服务器生成时,是否可以在只安装了.NET 4.0的服务器上成功运行.NET 4.0 DLL?

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

您可以更正这一点,但需要将4.0引用程序集添加到生成服务器(以便编译器找到它们),而不仅仅依赖.NET 4.5版本


有关详细信息,请参阅。

谢谢,这篇博文似乎描述了我们遇到的确切问题。但是,据我们所知,构建服务器已经有了4.0引用程序集,所以我们仍然不确定出了什么问题。@DavidMills一般来说,如果您打算以4.0为目标,我强烈建议不要在构建服务器上安装4.5。在这个就地升级中有太多破坏性的更改。也就是说,如果ref组件位于正确的位置,它应该可以工作。谢谢,里德。我们已经建立了Jenkins build从属服务器,以支持针对4.0的项目。这是不幸的,但似乎是必要的。希望微软在发布另一个.NET版本作为就地升级之前三思而后行。“希望微软在发布另一个.NET版本作为就地升级之前三思而后行”。。。您好.NET4.5.1!你的答案引起了一些问题,你可能需要加一点注释。