【问题标题】:Can I use .NET Standard to wrap .NET Core NuGet packages and make them available in classic .NET?我可以使用 .NET Standard 包装 .NET Core NuGet 包并使其在经典 .NET 中可用吗?
【发布时间】:2019-06-18 17:31:04
【问题描述】:

我正在浏览这篇博文:

https://www.hanselman.com/blog/ReferencingNETStandardAssembliesFromBothNETCoreAndNETFramework.aspx

..及其源代码:

https://github.com/ScarlettCode/Example

据我了解,它将 .NET Core NuGet 包 (Microsoft.EntityFrameworkCore) 包装在 .NET Standard 库中,并使其可用于经典的 .NET 4.6.1 应用程序:

<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.0.0" />

我说的对吗? 这可能是一种将 .NET Core NuGet 包包装在 .NET 标准库中的技术,可以在经典的 .NET Framework 4.6.1 应用程序中调用它们吗?

【问题讨论】:

    标签: .net .net-core .net-standard


    【解决方案1】:

    我可以使用 .NET Standard 包装 .NET Core NuGet 包并使其在经典 .NET 中可用吗?

    嗯,差不多,但不完全。

    据我了解,它将 .NET Core NuGet 包 (Microsoft.EntityFrameworkCore) 包装在 .NET Standard 库中,并使其可用于经典的 .NET 4.6.1 应用程序。

    这是你误解的地方。包参考适用于 Microsoft.EntityFrameworkCore.InMemory 的 2.0.0 版。我们可能认为这个包是“.NET Core 的一部分”,但实际上是在二进制级别包的目标是 .NETStandard 2.0。

    我如何知道包的目标是 .NET Standard 2.0?我通过查看 NuGet page 的 Dependencies 部分或咨询 Fuget 来确定这一点。

    .NET 4.6.1* 和 .NET Core 2.0 both support .NET Standard 2.0,也就是说这两个框架(和更新版本)都可以引用 .NET Standard 2.0 库。

    让我们回到你原来的问题:

    我可以使用 .NET Standard 包装 .NET Core NuGet 包并使其在经典 .NET 中可用吗?

    不可以,但您可以将代码打包到面向 .NET Standard 的库中,并使用 .NET Core 项目和 .NET Framework 项目中的这些库;同样,您可以在 .NET Framework 项目中引用 Nuget 包,前提是它们以 .NET Standard 为目标即使包名称中包含“Core”并且您认为它是 .NET Core 的一部分。这就是 .NET Standard 的美妙之处。

    这里的关键点是密切关注 Nuget 描述页面的 Dependencies 部分!


    *请注意,虽然 .NET 4.6.1 正式支持 .NET Standard 2.0,但 Microsoft 建议使用 4.7.2 或更高版本。请参阅my answer here 了解更多信息。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2020-12-21
    相关资源
    最近更新 更多