从.NET Core中的常规ClassLibrary调用方法?

时间:2018-02-01 14:19:31

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

背景

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

有一些第三。在常规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 Core)

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

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

问题

如何将SomeExternal引用到SomeFramework? 我尝试过直接汇编链接(添加引用> Assemblies>搜索),但SomeExternal无法加载。

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

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

1 个答案:

答案 0 :(得分:2)

.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。这样,当你正在工作时,你可以看到仍然需要移植的东西,如果你又回到使用你不应该使用的东西,就会被提醒。