【问题标题】:Call method from regular ClassLibrary within .NET Core?从 .NET Core 中的常规 ClassLibrary 调用方法?
【发布时间】:2018-02-01 14:19:31
【问题描述】:

背景

我们正在更改项目中的一些项目,我偶然发现了一个集成问题。

有一些第三。在常规 ClassLibrary (.NET 4.0) 上编写的派对 DLL,我们的项目现在在 .NET Standard + AspNet Core 上。我们必须更新整个基础设施,同时保持一切正常。

结构

  • SomeExternal.dll(使用 .NET 4.0 编写的第三方代码)
  • SomeFramework.dll (NETStandard 2)
  • App_1 (.NET 4.7.1)
  • App_2(AspNet 核心)

App_1 调用SomeFramework,然后调用SomeExternal
App_2 也调用SomeFramework,然后调用SomeExternal

这样做是为了防止直接调用SomeExternal。这是项目的要求,无法更改。

问题

如何将SomeExternal 引用到SomeFramework
我试过直接组装链接(添加参考>组装>搜索)但SomeExternal无法加载。

我已将整个项目设置为 x64 或 x86(而不是 AnyCPU),但没有任何改变。

我们正在使用 VS2017 15.5.5、.NET 4.7.1 和 .NET Core SDK 2.1.4。

【问题讨论】:

标签: c# .net .net-core asp.net-core-mvc .net-standard


【解决方案1】:

.NET Core 完全支持 .NET Standard 2.0,它本身具有足够广泛的 API 足迹,Microsoft 已经添加了对 .NET Framework 库的本机支持。换句话说,如果你运行的是 .NET Core 2.0+,你可以添加对任何你想要的 .NET Framework 库的引用。

但是,您会收到警告。不过,警告只是为了让您知道,虽然您可能能够充分利用该库,但它可能使用不受支持的 API。您需要测试并验证一切是否正常,然后您可以安全地取消警告,如果您愿意的话。

大多数情况下,此时不受支持的 API 将解决 Windows 特定的功能。由于 .NET Core 和 .NET Standard 是跨平台的,因此仅适用于 Windows 的 API 不会出现在两者的 API 足迹中。然而,即便如此,还有Microsoft.Windows.Compatibility NuGet 扩展了 .NET Standard 以支持其中一些缺失的 API。但是,此 NuGet 仅用于将应用程序迁移到 .NET Standard/.NET Core,而不是作为长期解决方案。目标应该仍然是从这些不受支持的 API 转向实际受支持且跨平台的 API。

您还应该使用API Analyzer,它将在旧代码和新代码中调用已弃用和不受支持的 API。这样,在您工作时,您可以看到仍然需要移植的内容,并在您恢复使用不应该使用的内容时得到提醒。

【讨论】:

  • 做到了。阅读问题的问题部分。应该管用?是的。它真的有效吗?不。添加此引用以使其正常工作的唯一方法是通过 Nuget?另请记住,由于我正在加载第 3 方 DLL,因此我不能保证太多。从完整的 .NET 项目加载工作正常,但核心失败。
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 2020-10-27
  • 2021-02-03
相关资源
最近更新 更多