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

标签 .net visual-studio-2015 mono cross-platform .net-core

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

我只需要:

  • 常见的 .Net 类型和 API(我不想因为缺少我认为是语言必不可少的部分而感到惊讶)
  • JSON 和 XML 操作工具
  • 文件系统访问(可能有些限制),
  • HTTPS 客户端,
  • SQL 级 RDBMS 客户端(我不需要 ORM 功能,当然不介意它可用)
  • 如果可能,请反射(reflection)
  • 如果可能,异步和线程设施
  • 最新版本的 C# 语言可能

  • 我在以下项目类型之间进行选择
  • 类库 (.NET Core)
  • 类库(.NET 标准)
  • 类库(.NET 框架)
  • 类库(可移植)

  • 我听说 Portable 就是它所说的,但现在我们已经有了在 Linux 和 Mac 上运行的 Core(也许 Windows Phone 和 Xamarin 也是如此?),而且我几乎没有问题,使用 EF Core 显然在我的经典 Windows Desktop 中针对它。 NET 框架应用程序。由于 Mono 和 Xamarin,经典 .NET Framework 代码似乎在非 Windows 平台上得到了很好的支持。 .NET Standard - 我不知道这是什么意思,我刚刚通过“新项目”窗口搜索工具通过查找所有种类的“类库”发现了这种类型。

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

    最佳答案

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

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

    作为一个库发布者,我现在选择发布包含 .NET Framework 版本、.NET Standard 版本和 PCL 版本的 NuGet 包,并且从长远来看会逐渐放弃 .NET Framework 和 PCL 版本。许多其他图书馆也这样做。

    我还写了一篇博文来介绍更多,

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

    关于.net - 为跨平台开源 UI 不可知 C# 类库选择哪种 Visual Studio 2017 项目类型,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42737406/

    相关文章:

    c# - .net C# opc 客户端

    .net - 这个 CIL 代码是做什么的?为什么需要第3步?

    visual-studio-2015 - CPLEX 12.8,Visual Studio 2015错误: Cannot open include file

    .net - 如何检查具有给定 PID 的进程是否正在运行?

    c# - 如何在 C# 中写入 unix fifo

    c# - 我如何告诉 mono 在哪里可以找到图书馆?

    c# - 如何使用旧的 MS Sans Serif 字体

    visual-studio-2015 - 安装 Dot Net Core 1.0.0 VS 2015 Tools Preview 2 时出现问题

    c# - 如何让套接字在 Unity 和 UWP 应用程序之间工作?

    使用 jsonp 来自 Jquery 的 REST WCF url 中的 javascript 错误