我们最近在我们的持续集成构建服务器上安装了.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。
总结一下:
Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.
是什么给出的?在使用.NET 4.5的服务器构建dll时,是否可以在仅安装了.NET 4.0的服务器上成功运行.NET 4.0 dll?
答案 0 :(得分:12)
这是因为4.5是4.0的就地升级。当构建服务器编译时,默认情况下,即使您的目标是.NET 4,它也会找到4.5程序集。
您可以更正此问题,但是您需要将4.0引用程序集添加到构建服务器(以便编译器找到它们),而不仅仅依赖于.NET 4.5版本。
有关详细信息,请参阅Marc Gravell's blog post on the subject。