选择哪种 Visual Studio 2017 项目类型作为跨平台开源 UI 不可知 C# class 库,为什么?

Which Visual Studio 2017 project type to choose for a cross-platform open-source UI-agnostic C# class library and why?

我有一个 C# class 库的想法,我想开发并发布到开源。我想让它在尽可能多的可用 .Net 平台(例如完整的 .Net、Mono、.Net Core、Xamarin,只有 classic .Net 兼容性然而,这确实是必须的)。该库不会依赖于任何 UI 相关的东西,也不依赖于 Windows 的任何东西,比如 WPF。

我只需要:

  1. 常见的 .Net 类型和 API(我不想因为缺少我认为是语言的重要组成部分的东西而感到惊讶)
  2. JSON 和 XML 操纵设施
  3. 文件系统访问(可能有些限制),
  4. HTTPS 客户端,
  5. SQL 级 RDBMS 客户端(我不需要 ORM 功能,当然不介意它可用)
  6. 如果可能的话反思
  7. 尽可能使用异步和线程工具
  8. 可能是最新版本的C#语言

我在以下项目类型中进行选择

  1. Class 库 (.NET Core)
  2. Class 库(.NET 标准)
  3. Class 库 (.NET Framework)
  4. Class 图书馆(便携式)

我听说 Portable 就是它所说的,但现在我们已经有了在 Linux 和 Mac 上运行的核心(Windows Phone 和 Xamarin 也许也是?)而且我在使用 EF Core 时几乎没有任何问题,它显然在我的 classic Windows 桌面 .NET Framework 应用程序中以它为目标。由于 Mono 和 Xamarin,Classic .NET Framework 代码似乎在非 Windows 平台上得到了很好的支持。 .NET Standard - 我不知道这是什么意思,我刚刚使用 "New Project" window 搜索工具通过查找 "Class Library".[=13 的所有变体发现了这种类型=]

我应该选择哪一个,为什么,我应该知道什么?

  • .NET Standard Class 库:最大的灵活性,应该能够在各种 .NET 中使用 applications/platforms(不断发展,因为尚未涵盖 Unity)。
  • .NET Framework Class 库:你也应该知道的旧知识。
  • .NET Core Class 库:在 .NET Core 应用程序之间共享代码。它存在,因为 .NET Standard class 库有其局限性(配置文件表面通常小于 .NET Core 应用程序)。
  • 便携式 Class 库 (PCL):您现在可以避免使用它们,除非您确实需要支持旧版平台。使用 .NET Standard 更好,而且面向未来。

您可以轻松地 运行 一些实验来断言我在上面所做的陈述。

作为库发布者,我选择此时发布包含.NET Framework 版本、.NET Standard 版本和PCL 版本的NuGet 包,并逐渐放弃.NET Framework 和PCL 长版本 运行。许多其他图书馆也这样做。

我还写了一篇博客post来涵盖更多内容,

https://blog.lextudio.com/which-class-library-project-to-go-in-visual-studio-2015-2017-a48710cf3dff