asp.net - 在 .Net 标准目标中引用 AspNetCore 库

标签 asp.net asp.net-core .net-standard

我正在尝试从我的前辈编写的 N 层应用程序中学习。数据访问和业务层的目标框架是 .NET Standard 2.0,但在该层的依赖项中有来自 Microsoft.AspNetCore 的库! .Net Standart 目标如何引用 .Net Core 库?
ScreenShot

最佳答案

.NET Standard 只是受支持的 API 的编码,有点像代码中的接口(interface),带有 .NET Framework/.NET Core/等。作为该接口(interface)的实现。就像在代码中使用接口(interface)一样,您可以将接口(interface)的任何实现强制转换为接口(interface),但是,您只能使用该接口(interface)提供的功能的最小公分母。代码中的基本思想:

public interface INetStandard
{
    public void StandardMethod();
}

public class NetFramework : INetStandard
{
    public void StandardMethod() { ... }
    public void FrameworkMethod() { ... }
}

public class NetCore : INetStandard
{
    public void StandardMethod() { ... }
    public void CoreMethod() { ... }
}

以 .NET Standard 为目标类似于向上转换到接口(interface)。在上面的代码中,这意味着您可以访问 StandardMethod ,但您将无法使用 FrameworkMethod/CoreMethod ,无论实际类型是什么。

至于在 .NET Standard 中使用 .NET Core 库之类的东西,这实际上并不是您正在做的事情。您提到的 NuGet 包之类的库通常是多目标的,例如同时使用 .NET Standard 和 .NET Core 作为目标。这实际上是一个 promise ,即该库虽然适用于 .NET Core,但不使用任何特定于 .NET Core 的 API。或者,如果确实如此,它会以不会破坏 .NET Standard 目标的方式(通过 using 指令等)这样做。无论哪种情况,都可以安全地包含在 .NET Standard 库中,因为它只使用 .NET Standard 支持的东西。尽管我不知 Prop 体情况是什么,但完全有可能拥有像 ASP.NET Core NuGet 包这样的东西,而您实际上无法将其包含在 .NET Standard 库中。如果它没有专门针对 .NET Standard,那么它将无法工作。

.NET Framework 的工作方式类似,但也是一种特殊情况。因为有很多针对 .NET Framework 的旧库实际上与 .NET Standard 完全兼容,所以 Visual Studio 有一个特殊的点允许您将它们放入其中,即使它们并不专门针对 .NET Standard。然而,当你这样做时,你会收到一个警告,这是一个温和的提醒,仅仅因为你被允许这样做,并不意味着它实际上会起作用。然后,您必须进行自己的测试,以确保库按应有的功能运行并且一切都正确编译。这样,旧的库不会强制全部升级,特别是因为现在许多库实际上可能不受支持或被放弃。

总而言之,.NET Standard 库只能依赖于其他 .NET Standard 库。您可以使用的 Core 包是这样的,因为它们除了 .NET Core 之外还针对 .NET Standard。由于特殊异常,允许仅针对 .NET Framework 的库,但不保证可以正常工作。

关于asp.net - 在 .Net 标准目标中引用 AspNetCore 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52825255/

相关文章:

asp.net - .cshtml 文件显示为纯 html

asp.net - 使用 javascript 为单个 aspage 上的多个实例启用/禁用表

asp.net-core - 希望 ASP.NET Core 中间件在 MVC Razor View Engine 之后运行

c# - CS1703 : In Xamarin. Droid,我应该使用位于 Mono.Framework 或 System.Runtime 中的 .Net Standard windowsruntime.dll?

c# - 是否构建单独的页面

asp.net - CSS 在 updatepanel 中搞砸了

c# - 在同一个 MVC 6 Controller 中组合 API Controller 调用和 Controller 调用

c# - .NET Core Web API 模型验证

nuget - Visual Studio 2017 生成代理无法生成并出现错误 cs0400

c# - 如何使内部结构对 .NET Standard 中的多个其他程序集可见