NET Standard 与 Net Core 应用程序:创建 .NET Core 项目时(使用控制台或 class 库)

NET Standard vs Net Core App: when creating .NET Core Project (using console or class library)

我正在尝试将我的项目开发为跨平台的。我以这种方式创建了几个 class 库:

但是,当我使用 Entity Framework 构建我的数据库时,需要的 nuget 包没有安装,除非在控制台应用程序中使用。

不同之处在于,控制台应用程序引用了 .NET Core:

并且 Class 库引用 NET 标准:

那么为什么它们都在 .NET Core 下但引用不同的库?它们都是跨平台的还是仅使用.NET Core 的控制台? 在这种情况下我应该避免使用 Class 库吗?​​

"So why they are both under .NET Core but referencing different libraries?"
推荐的为其创建库的 NET 版本现在是 Net Standard Library. That is why the default when you create a class library is the net standard version instead of Net Core. You could manually change that but is not recommended see also this blog post about Introducing .NET Standard Library

它们都是跨平台的还是只有使用.NET Core的控制台?
是的,它们都是跨平台的。

在这种情况下我应该避免使用 Class 库吗?​​
不,一定要每次都使用 Class 库。这不是微软一开始的初衷,但后来他们改变了主意,所以并不是所有的包都与 .net 标准兼容,这就是为什么你不能使用 net 标准版本来拥有脚手架项目,因为 "Microsoft.EntityFrameworkCore.Tools" 目前只兼容 Net core,但可能很快就会兼容 DotNet Standard

正如我所说,如果你真的想保留脚手架选项,那么你可以使用一个 class 库项目并在 project.json .net 版本中手动更改,然后一次兼容你可以切换回.net 标准。您的其他项目(例如服务或数据层,取决于您希望如何保持分离)可以是具有 dotnet 标准的 class 库,它们将能够正常工作。

或者您可以从您的原始解决方案中获得一个控制台应用程序(.net 核心)appart,然后使用 .net 标准将其复制并粘贴到您的真实 class 库中。 (这是我们目前在做的项目)