【问题标题】:Mixing & Calling .Net 4.5 from .Net Framework 4.0从 .Net Framework 4.0 混合和调用 .Net 4.5
【发布时间】:2015-10-14 14:58:14
【问题描述】:

我有一个针对 .NET Framework 4.0 编写的应用程序。 在其中一个基础项目中,我必须添加一个在 .NET 4.5 中完成的引用。所以,为了构建这个项目,我不得不将它的目标框架切换到 4.5。

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

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

  2. 我可以混合使用这两个框架并从 .NET 4 项目调用到 .NET 4.5 项目吗?

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

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

【问题讨论】:

  • 为什么不全部改变呢? .NET 4.5 是 4.0 的二进制替换。这意味着只需安装运行时即可将 4.0 二进制文件替换为 4.5。当您最终在 4.5 上运行时,没有理由混合版本。您可以使用Target Framework Migrator 之类的工具一次性升级所有项目
  • 另一种选择是保持在 4.0 并使用 Bcl.Async、Bcl.HttpClient 等兼容包。这不会给您带来任何运行时优势,例如后台垃圾回收
  • 这将导致比必须处理升级问题更多的问题。我现在正在采取升级路径。我只是希望可能有一个简单的门外方法来做到这一点。再次感谢您提供的所有宝贵答案。

标签: c# .net .net-4.0 .net-4.5


【解决方案1】:

我认为构建警告很好地描述了将要发生的事情。

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

  • ProjectA(框架版本 4.0)
  • ProjectB(框架版本 4.5)

ProjectA 引用 ProjectB。

警告:

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

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

【讨论】:

  • 我知道 VS 警告和错误。我想我毕竟必须升级。
  • 升级这个东西很明显。真正的意思是升级不是一种选择,因为不这样做是有原因的,比如在 Windows XP 上运行应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 2014-02-05
相关资源
最近更新 更多