首页 文章

什么是“.NET Core”?

提问于
浏览
266

最近在一个官方.NET Framework Blog它被宣布.NET Core is going open source . 具有讽刺意味的是,作者提到将在下一篇文章中解释 .NET Core . another announce post中提到了更多细节 .

从提供的图表:

.NET Core diagram

和文章文本本身,我认为.NET Core(除了明显的东西,如开源)是完整的.NET的模块化重新实现 . 即框架组件在必要时加载,就像现在加载NuGet包一样 . 现在,ASP.NET 5是已经实现的模块之一 . 我对.NET Core的理解是否正确?也许我错过了什么?


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

10 回答

  • 7

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

    docs.microsoft.com

  • 70

    它是.NET Framework的一个子集,以Compact Framework版本开始 . 进入Silverlight,Windows Store和Windows Phone . 专注于保持部署小,适合快速下载和具有有限存储功能的设备 . 并且更容易在非Windows平台上运行,当然它被选为开源版本的原因 . 省略了CLR和基类库的“困难”和“昂贵”部分 .

    否则,当你定位这样一个框架版本时总是很容易识别,很多东西都会丢失 . 您将使用一组不同的引用程序集,这些程序集仅显示运行时支持的内容 . 存储在 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore 目录中的计算机上 .


    更新:在.NETCore 2.0版本发布之后,我看到了一些具有代表性的数字,这些数字提供了不错的见解 . 在过去的两年里,他们一直在努力将框架apis移植到.NETCore . .NETCore 1.0最初支持13,000个api . .NETCore 2.0增加了20,000 api,使总数达到32,000,并允许大约70%的现有Nuget包被移植 . 有一组api过于强调Windows,很容易移植到Linux和MacOS . 最近发布的Windows兼容包涵盖了另外20,000个api .

  • 6

    Microsoft认识到未来的Web开源范例,并决定将.NET打开到其他操作系统.NET核心是用于Mac和Linux的.NET Framework . 它是一个“轻量级”.NET Framework,因此缺少某些功能/库 . 在Windows上,我仍然会运行.NET Framework / VS2015 . .NET Core对开源世界如nodejs,npm,yeoman,docker等更友好 . 您可以使用Visual Studio Code .NET核心在Mac或Linux上开发成熟的网站和RESTful API,这是以前无法实现的 . 因此,如果您喜欢mac或Ubuntu,并且您是.NET开发人员,那么请继续进行设置 . 对于Mono vs. .NET Core,Mono是作为Linux的.NET Framework开发的,现在由Microsoft(名为Xamarin的公司)收购并用于移动开发 . 最终,Microsoft可能会将Mono合并/迁移到.NET核心 . 我现在不担心Mono .

  • 120

    正在尝试在VS2017中创建一个新项目(最近从2015年升级),并注意到项目类型的新选择 . 要么他们是新的,要么自从我开始一个新项目已经有一段时间了! :)

    enter image description here

    来到this docs link,发现它非常有用,所以分享 . 子弹的细节也在文章中提供 . 只需在这里发布项目符号:

    在以下情况下,您应该将.NET Core用于您的服务器应用程序:您有跨平台需求 .
    您的目标是微服务 .
    您正在使用Docker容器 .
    您需要高性能和可扩展的系统 .
    您需要按应用程序并行.NET版本 .
    您应该在以下情况下为您的服务器应用程序使用.NET Framework:您的应用程序当前使用.NET Framework(建议扩展而不是迁移)
    您需要使用不适用于.NET Core的第三方.NET库或NuGet包 .
    您需要使用.NET Core不可用的.NET技术 .
    您需要使用不支持.NET Core的平台 .

  • 16

    我找到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只是新框架配置的测试“主题”,部分可能就是这样因为它们完全不同:

    enter image description here

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

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

    即顶部的洋红色矩形将与新的App模型大量添加,但基础将保持常见 .

    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上表现出色,微软将在所有三个平台上支持它 . 我们保留了.NET Framework为企业级开发带来的 Value . 我们将提供.NET Core发行版,它们代表我们一起测试和支持的一组NuGet包 . Visual Studio仍然是您开发的一站式商店 . 使用属于发行版的NuGet包不需要互联网连接 .

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

  • 13

    当前的documentation很好地解释了什么是.NET Core,使用的区域等等 . 以下特性最好定义.NET Core:

    灵活部署:可以包含在您的应用程序中,也可以安装在并行用户或机器范围内 . 跨平台:在Windows,macOS和Linux上运行;可以移植到其他操作系统 . 受支持的操作系统(OS),CPU和应用程序方案将随着时间的推移而增长,由Microsoft,其他公司和个人提供 . 命令行工具:可以在命令行中执行所有产品方案 . 兼容:.NET Core通过.NET标准库与.NET Framework,Xamarin和Mono兼容 . 开源:.NET Core平台是开源的,使用MIT和Apache 2许可证 . 文档根据CC-BY许可 . .NET Core是一个.NET Foundation项目 . Microsoft支持:根据.NET Core Support,Microsoft支持.NET Core

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

    .NET运行时,提供类型系统,程序集加载,垃圾收集器,本机互操作和其他基本服务 . 一组框架库,提供原始数据类型,应用程序组合类型和基本实用程序 . 一组SDK工具和语言编译器,支持.NET Core SDK中提供的基础开发人员体验 . 'dotnet'应用主机,用于启动.NET Core应用 . 它选择运行时并托管运行时,提供程序集加载策略并启动应用程序 . 同样的主机也用于以相同的方式启动SDK工具 .

  • 13

    .NET Core是由GitHub上的Microsoft和.NET社区维护的通用开发平台 . 它是跨平台的,支持Windows,macOS和Linux,可用于设备, Cloud 和嵌入式/物联网场景 .

    了解更多详情:https://docs.microsoft.com/en-us/aspnet/core/

  • 3

    来自.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 .

    鉴于其历史和目的,微软的.NET规范和实现非常以Windows和IIS为中心,并且"fat" . 有variations with fewer libraries, namespaces and types,但很少有用于Web或桌面开发或troublesome to port from a legal standpoint .

    因此,为了提供可以在非Windows机器上运行的非Microsoft版本的.NET,必须开发一种替代方案 . 不仅要为此移植运行时,而且要使整个Framework类库得到很好的采用 . 最重要的是,要完全独立于Microsoft,需要使用最常用语言的编译器 .

    Mono是少数几个,如果不是唯一的替代实现的runtime,它运行在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上运行 .

  • 3

    来自Microsoft's Website

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

    这些技术与本机.NET的不同之处在于它们使用CoreCLR运行时(在通用Windows平台中使用)运行 .

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

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

  • 40

    .NET Core是由Microsoft和.NET社区在GitHub上维护的通用开发平台 . 它是跨平台的,支持Windows,macOS和Linux,可用于设备, Cloud 和嵌入式/物联网场景 .

    See the full community documentation

相关问题