【问题标题】:What is ".NET Core"?什么是“.NET Core”?
【发布时间】:2015-01-10 13:10:58
【问题描述】:

最近在官方.NET Framework Blog中宣布.NET Core is going open source

讽刺的是,作者提到什么 .NET Core 将在下一篇文章中解释。 another announcement post 中提到了更多细节。

根据提供的图表:

和文章本身,我会假设 .NET Core(除了开源等显而易见的东西)是完整 .NET 的模块化重新实现。 IE。根据需要加载框架组件,就像现在加载 NuGet 包一样。现在 ASP.NET 5 是已经实现的模块之一。我对 .NET Core 的理解是否正确?也许我错过了什么?


我找到了a recent article,我发现它既简短又非常好。它涵盖了 .NET Standard、.NET Core 和 .NET Framework 及其关系。我强烈推荐它。

【问题讨论】:

  • 这里有一篇关于它的新博客文章blogs.msdn.com/b/dotnet/archive/2014/12/04/…,但仍然很难理解该图。这是否意味着 WPF 和 WinForms 不能使用 .NET Core 之类的?
  • @dodgy_coder 我想他们最终会的,只是 Store Apps 和 ASP.NET 5 是第一个使用新框架架构的。
  • @dodgy_coder,没错。截至目前,WPF 和 WinForms 应用程序不能移植到 .net 核心。它们可能会被重新开发为 Windows 通用应用程序。看到这个:blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
  • 这里有很多很好的答案。用我自己的话说……“它是对 dot net 框架的重写,但重写是开源的并且在 LINUX 上运行”。请注意,重写不是一次 100%,它一直在随着时间的推移而增长。另请注意,dotnetFramework 上的某些内容不能/不应该被移植,以便它可以在 Linux 上运行。 (有时在讨论中会有一些圣战)。由于 C# 是对 Java 的重写,因此这是对重写的重写......而且事情“非常干净”恕我直言......因为它能够彻底打破旧版本的依赖关系。同样,只是“用我自己的话来说”。

标签: .net .net-core


【解决方案1】:

来自 .NET 博客Announcing .NET 2015 Preview: A New Era for .NET

.NET Core 有两个主要组件。它包括一个小型运行时,该运行时使用与 .NET Framework CLR 相同的代码库构建。 .NET Core 运行时包含相同的 GC 和 JIT (RyuJIT),但不包含应用程序域或代码访问安全性等功能。运行时通过 NuGet 交付,作为 [ASP.NET Core] 包的一部分。

.NET Core 还包括基类库。这些库在很大程度上与 .NET Framework 类库的代码相同,但已被分解(删除依赖项)以使我们能够发布更小的库集。这些库在 NuGet.org 上作为 System.* NuGet 包提供。

还有:

[ASP.NET Core] 是第一个采用 .NET Core 的工作负载。 [ASP.NET Core] 在 .NET Framework 和 .NET Core 上运行。 [ASP.NET Core] 的一个关键价值在于它可以在同一台机器上运行多个版本的 [.NET Core]。网站 A 和网站 B 可以在同一台机器上的两个不同版本的 .NET Core 上运行,也可以使用相同的版本。

简而言之:首先是Microsoft .NET Framework,它由一个执行应用程序和库代码的运行时组成,还有一个nearly fully documented standard class library

运行时是Common Language Runtime,它实现了Common Language Infrastructure,与The JIT compiler一起运行CIL (formerly MSIL) bytecode

考虑到它的历史和目的,Microsoft 的 .NET 规范和实现非常以 Windows 和 IIS 为中心且“肥大”。有 variations with fewer libraries, namespaces and types,但其中很少有对 Web 或桌面开发有用或者是 troublesome to port from a legal standpoint

因此,为了提供可以在非 Windows 机器上运行的非 Microsoft 版本的 .NET,必须开发一种替代方案。不仅要移植运行时,还要移植整个框架类库才能被广泛采用。最重要的是,要完全独立于 Microsoft,需要针对最常用语言的编译器。

Monoruntime 的少数(如果不是唯一的替代实现)之一,它可以在 Windows 以外的各种操作系统上运行, almost all namespaces from the Framework Class Library as of .NET 4.5VBC# compiler

进入 .NET Core:runtime 的开源实现和最小的基类库。所有附加功能均通过 NuGet 包提供,通过应用程序本身部署特定的运行时、框架库和第三方包。

ASP.NET Core 是 MVC 和 WebAPI 的新版本,与瘦 HTTP 服务器抽象捆绑在一起,可在 .NET Core 运行时运行 - 也可在 .NET Framework 上运行。

【讨论】:

  • 哦,我就是这么想的!它实际上在博客的时间线下方!太可惜了..
  • 都是很新的东西,几乎没有描述,我认为你问了一个很好的问题。 :)
  • 转念一想似乎不是“下一篇文章”,因为描述仍然很简短。
  • 这不就是 vNext 带给我们的吗?
  • 自从他们开始通过 nuget 发布框架以来,我们一直在这样做。不需要该帖子中的解决方法。
【解决方案2】:

它是 .NET Framework 的子集,从 Compact Framework 版本开始。它发展到 Silverlight、Windows Store 和 Windows Phone。它专注于保持小型部署,适用于快速下载和存储能力有限的设备。而且它更容易在非 Windows 平台上启动,这肯定是它被选为开源版本的原因。省略了 CLR 和基类库的“难”和“昂贵”部分。

否则,当您针对这样的框架版本时,总是很容易识别,因为会丢失很多好东西。您将使用一组不同的引用程序集,它们仅公开运行时支持的内容。它存储在您机器上的C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore 目录中。


更新:在 .NET Core 2.0 发布之后,我看到了一些具有代表性的数字,它们提供了不错的洞察力。在过去的两年里,他们一直在努力将框架 API 向后移植到 .NET Core。 .NET Core 1.0 最初支持 13,000 个 API。 .NET Core 2.0 增加了 20,000 个 API,使总数达到 32,000 个,并允许移植大约 70% 的现有 NuGet 包。有一组 API 过于依赖于 Windows,以至于无法轻松移植到 Linux 和 MacOS。在最近发布的 Windows 兼容包的支持下,它又增加了 20,000 个 API。

【讨论】:

  • 从博客文章中我不会说这看起来像另一个“紧凑”框架版本。宣布.NET Core 是5.0 版,高于最新的完整框架。我认为他们的意思是不同的东西。
  • 我刚刚描述了.NETCore版本的历史。太阳底下没有新鲜事,它已经存在了很长时间。 5.0 的变化是增量的,新的 RyuJIT x64 抖动是我现在唯一能想到的。只有许可证更改是真正新的:)
  • 我明白你的意思。虽然我仍然认为将框架子集宣布为 .NET 的下一个时代有点大胆。
【解决方案3】:

我找到了a recent article,我发现它既简短又非常好。它涵盖了 .NET Standard、.NET Core 和 .NET Framework 及其关系。我强烈推荐它。很遗憾,我没有时间适应并放在这里。

原答案内容如下:


因此,根据关于该主题的最新official entry,以下是我所看到的一些关键点:

.NET Core 本质上是 .NET Framework 的一个分支,其 实施也围绕考虑因素进行了优化。

我们认为 .NET Core 并不特定于 .NET Native 或 ASP.NET 5 – BCL 和运行时是通用设计的 是模块化的。因此,它构成了所有未来 .NET 的基础 垂直。

所以 .NET Native 和 ASP.NET 5 只是新框架配置的测试“主题”,部分原因可能是它们完全不同:

看,他们甚至需要单独的低级,但 BCL 的主要部分仍然很常见:

我们认为 .NET Core 并不特定于 .NET Native 或 ASP.NET 5 – BCL 和运行时是通用设计的 是模块化的。因此,它构成了所有未来 .NET 的基础 垂直。

即,顶部的洋红色矩形将大量添加新的应用模型,但底部将保持通用。

NuGet 部署:

与 .NET Framework 相比,.NET Core 平台将是 作为一组 NuGet 包交付。我们选择 NuGet 是因为 这就是图书馆生态系统的大部分所在。

与当前框架的关系:

对于 Visual Studio 2015,我们的目标是确保 .NET Core 是 .NET Framework 的纯子集。换句话说,不会有 任何功能差距。 Visual Studio 2015 发布后我们的期望 是 .NET Core 的版本会比 .NET Framework 快。这 意味着在某些时间点,某个功能只会出现在 在基于 .NET Core 的平台上可用。

总结:

.NET Core 平台是一个新的 .NET 堆栈,针对开放式进行了优化 NuGet 上的源代码开发和敏捷交付。我们正在与 Mono 社区使其在 Windows、Linux 和 Mac 上表现出色,以及 Microsoft 将在所有三个平台上支持它。

我们保留了 .NET Framework 带来的价值 企业级发展。我们将提供 .NET Core 发行版 表示一组我们一起测试和支持的 NuGet 包。 Visual Studio 仍然是您的一站式开发商店。消费 作为分发的一部分的 NuGet 包不需要 互联网连接。

基本上,这可以被认为是具有更改分发模型的 .NET 4.6,同时它正处于开源过程中。

【讨论】:

    【解决方案4】:

    当前的documentation 很好地解释了 .NET Core 是什么、使用的领域等等。以下特征最好地定义了 .NET Core:

    灵活部署:可以包含在您的应用中或安装 并排用户或机器范围。

    跨平台:在 Windows 上运行, macOS 和 Linux;可以移植到其他操作系统。支持的操作系统 (OS)、CPU 和应用场景将随着时间的推移而增长, 由 Microsoft、其他公司和个人提供。

    命令行工具:所有产品场景都可以在命令行中执行。

    兼容:.NET Core 与 .NET Framework、Xamarin 和 Mono,通过 .NET 标准库。

    开源:.NET Core 平台是开源的,使用 MIT 和 Apache 2 许可证。 文档在 CC-BY 下获得许可。 .NET Core 是一个 .NET 基础 项目。

    Microsoft 支持:.NET Core 受 Microsoft 支持, 每个 .NET Core 支持

    以下是 .NET Core 包含的内容:

    .NET 运行时,提供类型系统、程序集加载、垃圾收集器、本机互操作性和其他基本服务。

    一组框架库,提供原始数据类型、应用程序组合类型和基本实用程序。

    .NET Core SDK 中提供了一组可实现基本开发人员体验的 SDK 工具和语言编译器。

    “dotnet”应用程序主机,用于启动 .NET Core 应用程序。它选择运行时并托管运行时,提供程序集加载策略并启动应用程序。同样的主机也用于以几乎相同的方式启动 SDK 工具。

    【讨论】:

      【解决方案5】:

      .NET Core 是 .NET 标准 (ECMA 335) 的新跨平台实现,类似于 Mono,但由 Microsoft 自己完成。

      docs.microsoft.com

      【讨论】:

        【解决方案6】:

        Microsoft 认识到未来的 Web 开源范例,并决定将 .NET 开放给其他操作系统。 .NET Core 是适用于 Mac 和 Linux 的 .NET 框架。它是一个“轻量级”的 .NET 框架,因此缺少一些功能/库。

        在 Windows 上,我仍然会运行 .NET Framework 和 Visual Studio 2015。.NET Core 对 Node.js、npm、YeomanDocker 等开源世界更加友好。

        您可以使用以前无法实现的 Visual Studio Code + .NET Core 在 Mac 或 Linux 上开发成熟的网站和 RESTful API。因此,如果您喜欢 Mac 或 Ubuntu,并且您是 .NET 开发人员,那么请继续进行设置。

        对于Mono 与.NET Core,Mono 是作为Linux 的.NET 框架开发的,现在被微软(公司名为Xamarin)收购并用于移动开发。最终,微软可能会将 Mono 合并/迁移到 .NET Core。我现在不会担心 Mono。

        【讨论】:

          【解决方案7】:

          我今天尝试在 Visual Studio 2017 中创建一个新项目(最近从 Visual Studio 2015 升级)并注意到项目类型的新选择集。要么他们是新的,要么我开始一个新项目已经有一段时间了! :)

          我遇到了this documentation link,发现它很有用,所以我分享。文章中还提供了项目符号的详细信息。我只是在这里发布项目符号:

          在以下情况下,您应该将 .NET Core 用于您的服务器应用程序:

          You have cross-platform needs.
          You are targeting microservices.
          You are using Docker containers.
          You need high performance and scalable systems.
          You need side by side of .NET versions by application.
          

          在以下情况下,您应该为您的服务器应用程序使用 .NET Framework:

          Your application currently uses .NET Framework (recommendation is to extend instead of migrating)
          You need to use third-party .NET libraries or NuGet packages not available for .NET Core.
          You need to use .NET technologies that are not available for .NET Core.
          You need to use a platform that doesn’t support .NET Core.
          

          This link 提供 .NET 术语表。

          编辑 2020 年 10 月 7 日 查看.NET 5.0 - “......未来只需一个 .NET,您就可以使用它来面向 Windows、Linux、macOS、iOS、Android、tvOS、watchOS 和 WebAssembly 等等” 它应该在 2020 年 11 月发布。

          【讨论】:

            【解决方案8】:

            来自Microsoft's Website

            .NET Core 指的是几种技术,包括 .NET Core、ASP.NET Core 和 Entity Framework Core。

            这些技术与原生 .NET 的不同之处在于它们使用 CoreCLR 运行时(在 Universal Windows Platform 中使用)运行。

            正如您在问题中提到的,.NET Core 不仅是开源的,而且是可移植的 [在 MacOS、Windows 和 Linux 上运行]

            .NET Core 的内部结构也经过优化,除非应用程序需要,否则不会使用其核心库中的不同模块。

            【讨论】:

            • ".NET Core 指的是包括 .NET Core 在内的多种技术"...好东西
            【解决方案9】:

            Microsoft 刚刚发布了 .NET Core v 3.0,它是 .NET Core 的一个大大改进的版本。

            有关更多详细信息,请访问这篇精彩的文章: Difference Between .NET Framework and .NET Core 从 2019 年 4 月开始。

            【讨论】:

            • 强烈建议不要使用仅链接的答案和主要基于意见的答案。请看meta.stackexchange.com/a/8259
            • 知道了,我编辑了意见部分。谢谢你告诉我。
            • 以什么方式改进?您能否总结一下您认为最重要的变化和新增内容?
            【解决方案10】:

            .NET Core 是一个免费的开源托管计算机软件框架,适用于 Windows、Linux 和 macOS 操作系统。它是 .NET Framework 的开源跨平台继任者。

            .NET Core 应用程序在 Windows、Linux 和 macOS 上受支持。简而言之,.NET Core 类似于 .NET 框架,但它是跨平台的,即它允许 .NET 应用程序在 Windows、Linux 和 MacOS 上运行。 .NET 框架应用程序只能在 Windows 系统上运行。所以 .NET framework 和 .NET core 的基本区别在于 .NET Core 是跨平台的,.NET framework 只能在 Windows 上运行。

            此外,.NET Core 内置了 Microsoft 的依赖注入,您不必使用第三方软件/DLL 文件进行依赖注入。

            【讨论】:

            • 你能详细说明一下依赖注入吗?在这种情况下,这实际上意味着什么?你指的是特定的框架吗?你有一些参考/链接吗?
            【解决方案11】:

            .NET Core 是 .NET Framework 的开源跨平台版本。

            【讨论】:

              【解决方案12】:

              .NET Core 是 .NET 的开源跨平台版本。 Microsoft 产品除了拥有强大的功能外,对于普通用户来说总是很昂贵,尤其是使用 .NET 技术制造的产品的最终用户。

              大多数低级客户更喜欢使用 Linux 作为他们的操作系统,而在 .NET Core 之前,他们不喜欢使用 Microsoft 技术,尽管它们的能力很强。但是在.NET Core 生产之后,这个问题就彻底解决了,我们可以在不考虑他们的操作系统等的情况下满足我们的客户。

              【讨论】:

              • 没有完全解决。您将很难在 Linux 上使用 Windows FormsWPF 应用程序。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-02-22
              • 1970-01-01
              • 1970-01-01
              • 2017-10-12
              • 1970-01-01
              • 2017-01-07
              • 1970-01-01
              相关资源
              最近更新 更多