从.Net Framework 4.0混合和调用.Net 4.5

问题描述:

我有一个应用程序被编写并且面向.NET Framework 4.0。 在其中一个基础项目中,我必须添加一个在.NET 4.5中完成的引用。所以,为了构建这个项目,我不得不将它切换到4.5的目标框架。从.Net Framework 4.0混合和调用.Net 4.5

现在,VS正在抱怨引用此基础项目的应用程序中的每个项目。

  1. 有没有一种方法可以使这个基础项目的目标框架4.5,而无需改变所有引用它的项目。

  2. 我可以将这两个框架和从.NET 4项目调用到.NET 4.5项目。

  3. 最好的解决方案是,如果我可以在基础项目中使用基于.NET 4.5构建的新外部引用(导致所有这些麻烦),而无需将基础项目Target更改为.NET 4.5。那可能吗?

基本上我想使用这个为4.5构建的引用,而不必更改整个应用程序目标框架。

+1

为什么不改变它们呢? .NET 4.5是4.0的二进制替换。这意味着只需安装运行时就可以用4.5替换4.0的二进制文件。无论如何,当你最终在4.5上运行时,没有理由混合使用版本。您可以使用[Target Framework Migrator](https://visualstudiogallery.msdn.microsoft.com/47bded90-80d8-42af-bc35-4736fdd8cd13)等工具立即升级所有项目 –

+0

另一种选择是保持在4.0以及使用兼容性包如Bcl.Async,Bcl.HttpClient等。这不会给你任何运行时优势,如后台垃圾回收 –

+0

这会导致更多的问题,而不是处理升级问题。我现在正在升级。我只是希望有一种简单的方法可以做到这一点。再次感谢您提供所有有价值的答案。 –

我认为构建警告能很好地描述将会发生什么。

我创建了两个项目的解决方案:

  • 项目A(Framework版本4.0)
  • 项目B(Framework版本4.5)

项目A引用项目B。

警告:

The referenced project 'ProjectB' is targeting a higher framework version (4.5) than this project’s current target framework version (4.0). This may lead to build failures if types from assemblies outside this project’s target framework are used by any project in the dependency chain. 


The primary reference "c:\Scratch\ProjectA\ProjectB\bin\Debug\ProjectB.dll" could not be resolved because it was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0". ProjectA C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets 1819 

最好的办法是更新所有涉及到的项目。

+0

我知道VS的警告和错误。 我想我必须升级毕竟。 –

+0

这个升级的东西很明显。实际上意味着升级不是一种选择,因为有一些不这样做的原因,比如在Windows XP上运行应用程序。 – Centro