9

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

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

4

1 回答 1

12

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

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

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

于 2013-02-12T21:25:44.567 回答