【问题标题】:Mixing .Net Framework app with .Net Core library将 .Net Framework 应用程序与 .Net Core 库混合使用
【发布时间】:2020-06-08 23:04:27
【问题描述】:

在 Visual Studio 解决方案中,我需要有一个桌面 winforms 应用程序项目(.Net 框架 4.0),具体取决于 .Net Core 库项目。 我还不能将应用程序迁移到 .Net 核心,但我需要 .Net 核心(即 Microsoft.EntityFrameworkCore)的功能。这就是我创建一个新项目作为依赖项的原因。

似乎在构建时会导致问题:

对“Object”类型的引用声称它是在“System.Runtime”中定义的,但找不到

Idem with DateTime, Enum, Decimal, ...

好像两个项目中的对象都不一样。 我尝试使用 Microsoft.Windows.Compatibility,但它似乎不是一个解决方案。

有没有办法让两个项目一起构建和运行?

编辑 1

我尝试使用 .Net 标准项目而不是 .Net 核心,但在这种情况下,我什至无法将 .Net 框架应用程序的引用添加到 .Net 标准库。

项目“Std.csproj”以“netstandard2.0”为目标,它不能被以“.NetFramework,Version=v4.0”为目标的项目引用

编辑 2

.Net core 2.0 中的依赖项和 .Net Framework 4.6 中的应用程序仍然出现相同的错误:

项目“Std.csproj”以“netstandard2.0”为目标,它不能被以“.NetFramework,Version=v4.6”为目标的项目引用

编辑 3

我终于摆脱了 .Net Framework 4.6.1 的错误。但是,根据 required configuration 对于这个框架,这意味着我不能再部署到 Windows XP。学习...

由于我的目标是逐步迁移到 .Net Core,因此欢迎提出任何建议。

【问题讨论】:

  • 没有。如果要共享代码,请创建一个 .NET Standard 库。 EF Core 3.1 适用于 .NET Old - 它是一个 .NET Standard 2.0 包。您可能需要升级 EF Core 版本。
  • 是的。 EfCore 3.1 据说(从未测试过)与 NetStandard 2.0 兼容
  • @TomTom 这是包的目标。即使有人尝试过,它也无法使用更高版本的类
  • 等待 - .NET 4.0 多年来不受支持。它从未获得任何类型的 .NET Standard 支持 - 它不能,因为它甚至不支持 async/await。您需要升级到 .NET 4.6.1,最好是 .NET 4.7.2 以避免兼容性库出现问题。
  • 如果您不喜欢有趣的程序集绑定异常,最好使用 4.7.2 或 4.8。

标签: c# .net .net-core compatibility


【解决方案1】:

我需要一个 [...] .Net framework 4.0,具体取决于 .Net Core 库项目。

有没有办法让两个项目一起构建和运行?

没有

对不起。这不是它的工作方式。您不能直接从 .NET Core 引用 .NET Framework 程序集,或者反过来从 .NET Framework 引用 .NET Core 程序集。

(我有点似曾相识,我会尝试在此找到重复的)。

您可以做的是在 .NET Standard 中创建一个共享程序集,两者都可以引用,但在这种情况下,它实际上对您没有帮助,因为您需要更高的 .NET Framework 版本才能使用 .NET Standard 2.0.

可行的是在您的程序集之间创建一个连接,该连接不是通过引用的直接程序集绑定。一个可以通过 HTTP 上的 REST 或通过内存映射文件或以任何其他方式调用另一个,以使两种原本不兼容的技术进行通信。

【讨论】:

  • EF Core 3.1 是一个 .NET Standard 2.0 包,所以它可以工作。真正的问题是 OP 的目标是 .NET 4.0
  • “...不能直接从 .NET Core 引用 .NET Framework 程序集”这并不完全正确,.NET Core 确实支持运行一些针对 4.6.1 或更低版本的 Framework 程序集。跨度>
  • .NET Core 可以在 Windows 上使用 .NET Old 程序集。我在我的 .NET Core 应用程序中使用 AlphaFS 仅仅是因为没有其他方法可以访问高级 NTFS 功能。您在每次构建时都会收到警告,但程序集正常
  • @nvoigt 没有,because the .NET/VS teams explicitly added that support in .NET 2.0。这并不理想,但在许多情况下还没有其他选择。
【解决方案2】:

.net 版本必须至少为 4.6 才能引用 .net 标准项目或 nuget 包。 仅来自 Visual Studio 2017 或更高版本的额外提示,您将能够参考此内容。 Visual Studio 2015 将无法运行。

【讨论】:

  • 实际最小值为4.7.2。来自the docsFor .NET Framework projects that need to use such libraries, we recommend that you upgrade the project to target .NET Framework 4.7.2 or higher
  • 为什么投反对票?这是唯一的解决方案。 .NET 4.0 不受支持,它不能使用 any .NET Standard 或 Core 功能。至于 Visual Studio,所有Community 版本都是免费的,并提供与专业版相同的功能。
  • 我们有一些在 4.6.2 中使用 .net 标准的遗留产品,这就是为什么我将其作为最低要求来回答的原因。但我同意 4.7 是更好的选择。
  • 那么您已经看到了与所有这些兼容性库进行斗争是多么“有趣”...
  • 这个书面答案有些误导。 .NET 4.5 及更高版本可以使用 一些 级别的 .NET Standard,但您需要最低 4.6.1(对于易失性应用程序)或 4.7.2(对于更稳定的应用程序)才能使用 .NET标准 2.0 程序集,例如 EFCore。还有一些可用于 VS2015 的工具。
猜你喜欢
  • 1970-01-01
  • 2016-10-04
  • 2019-07-17
  • 1970-01-01
  • 2019-10-01
  • 2019-10-22
  • 2017-08-15
  • 2019-10-04
  • 1970-01-01
相关资源
最近更新 更多