bra*_*w98 5 asp.net asp.net-core .net-standard
我正在尝试从我的前辈编写的 N 层应用程序中学习。数据访问和业务层的目标框架是 .NET Standard 2.0,但在这些层的依赖项内部有来自 Microsoft.AspNetCore 的库!为什么 .Net Standart 目标可以引用 .Net Core 库?

.NET Standard 只是对支持的 API 的编码,有点像代码中的接口,带有 .NET Framework/.NET Core/等。是该接口的实现。就像在代码中使用接口一样,您可以将接口的任何实现转换为接口,但是,您只能使用该接口提供的功能的最小公分母。代码中的基本思想:
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() { ... }
}
Run Code Online (Sandbox Code Playgroud)
面向 .NET Standard 类似于向上转换到接口。在上面的代码中,这意味着您可以访问StandardMethod,但不能使用FrameworkMethod/ CoreMethod,无论实际类型是什么。
至于在 .NET Standard 中使用 .NET Core 库之类的东西,那实际上并不是你在做什么。像您提到的 NuGet 包这样的库通常是多目标的,例如同时使用 .NET Standard 和 .NET Core 作为目标。这实际上是一个承诺,即该库虽然适用于 .NET Core,但不使用任何特定于 .NET Core 的 API。或者,如果是这样,它会以不会破坏 .NET Standard 目标的方式(通过 using 指令等)这样做。无论哪种情况,都可以安全地包含在 .NET Standard 库中,因为它只使用 .NET Standard 支持的内容。虽然我不知道具体的情况,但完全有可能拥有像 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 的库并且不能保证工作。
| 归档时间: |
|
| 查看次数: |
1457 次 |
| 最近记录: |