NET Standard vs Net Core App:创建 .NET Core 项目时(使用控制台或类库)

Posted

技术标签:

【中文标题】NET Standard vs Net Core App:创建 .NET Core 项目时(使用控制台或类库)【英文标题】:NET Standard vs Net Core App: when creating .NET Core Project (using console or class library) 【发布时间】:2016-10-12 17:02:05 【问题描述】:

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

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

这是不同之处,控制台应用程序引用 .NET Core:

并且类库引用了 NET Standard:

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

【问题讨论】:

我发现:- NET Standard 库是 PCL:s 的下一个版本,它们都是跨平台的。 - NET Core 是 .NET Framework(仅适用于 Windows)的跨平台替代品。但这仍然不足以回答这个问题 【参考方案1】:

“那么为什么它们都在 .NET Core 下但引用不同的库?” 推荐的用于创建库的 NET 版本现在是 Net Standard Library。这就是为什么在创建类库时默认使用的是 net 标准版本而不是 Net Core。您可以手动更改它,但不建议您参阅这篇关于 Introducing .NET Standard Library 的博文。

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

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

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

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

【讨论】:

以上是关于NET Standard vs Net Core App:创建 .NET Core 项目时(使用控制台或类库)的主要内容,如果未能解决你的问题,请参考以下文章

将依赖注入与 .NET Core 类库 (.NET Standard) 结合使用

.Net Standard(.Net Core)实现获取配置信息

.NET Core 是 .NET Standard 的“实现”吗?

.net Core 多目标和 .net Standard 有啥区别?

如何在 Visual Studio 中将 .NET Framework 更改为 .NET Standard/Core?

.Net Core、Portable、Standard、Compact、UWP 和 PCL 之间的区别?