www.9778.com 10

解读发布:.NET Core RC2 and .NET Core SDK Preview 1

  • .NET Core 3.1 Preview 2 SDK and
    Runtime
  • Docker images

C++/CLI

在 Visual Studio 2019 16.4 中增加了一个新功能,可以创建可与 .NET Core
3.0+ 一起使用的 C++/CLI 组件。

该组件添加了几个可以使用的模板:

  • CLR Class Library (.NET Core)
  • CLR Empty Project (.NET Core)

C++/CLI 仅支持 Windows 平台,开发者需要安装“Desktop development with
C++”工作负载和“ C++/CLI support”组件,才能使用 C++/CLI。

同时,Visual Studio 2019
16.4 也发布了,其中就包含了 .NET Core 3.1
更新,这是一起使用 .NET Core 3.1 与 Visual Studio 所必需的更新。对于
Visual Studio 2019 用户,官方建议直接更新到 16.4,而不是单独下载 .NET
Core 3.1。

详情查看发布公告:

Announcing .NET Core 3.1

www.9778.com,(文/开源中国)    

  • .NET Core RC2 – Improvements, Schedule, and Roadmap(2016年5月6日)
  • Announcing ASP.NET Core RC2(2016年5月17日)
  • Announcing Updated Web Development Tools for ASP.NET Core
    RC2(2016年5月17日)
  • Announcing .NET Core RC2 and .NET Core SDK Preview
    1(2016年5月17日)
  • Announcing Entity Framework Core RC2(2016年5月17日)

● 对 Razor 组件的部分类支持;

● 将参数传递给顶级组件;

● 新的组件标签助手;

● 阻止 Blazor 应用中事件的默认操作;

● 停止 Blazor 应用中的事件传播;

● Blazor 应用程序开发期间的报错详情;

● 支持 HttpSysServer 中的共享队列;

● SameSite Cookie 的重大更改。

Improvements 

这个版本最大的改进是对 C++/CLI 的支持(又名“managed C++”)。使用
C++/CLI,需要安装“Desktop development with C++”工作负载和“C++/CLI
support”组件。如下图该组件是被选:

www.9778.com 1

此组件添加了几个模板:

  • CLR Class Library (.NET Core)
  • CLR Empty Project (.NET Core)

如果找不到,只需在 New Project 对话框中搜索。

(文/开源中国)    

.NET Core 3.1 发布了,这是对两个多月前发布的 .NET Core 3.0
的一小部分修复和完善,其中最重要的是 .NET Core 3.1
是一个长期支持(LTS)版本,并且官方将会支持三年。

.NET Core RC2 版本今天已经发布,但从 RC1 到 RC2
发布间隔了大概半年的时间,这在微软的发布中还是很少见的,2016年2月份,微软宣布了
.NET Core RC2 的延迟发布,虽然延迟发布,但之后 .NET
社区中都是一致的声音:希望微软精耕细作,把 .NET Core
专心做好,而不是急着发布出来,所以到现在是四个月的时间,微软确实在真正耗费精力的把
RC2 版本做好,手动点个👍!

● 支持 .NET Standard 2.1;

● 发布时支持静态资产;

● 支持 iOS 13;

● 改进连接器报错体验;

● Visual Studio 的 Attach to Process 调试。

微软发布了 .NET Core 3.1 Preview
2,这是一个小版本,主要亮点是改进
Blazor 和 Windows 桌面,获取方式:

Windows Forms Controls Removal

此版本移除了以下 Windows Forms 控件:

  • DataGrid
  • ToolBar
  • ContextMenu
  • Menu
  • MainMenu
  • MenuItem

早在 2005 年,这些控件就被 .NET Framework 2.0
中更强大的控件所取代,默认情况下 Visual Studio Designer
工具箱中都没有提供这些控件,现在官方决定删除这些控件,而只关注新控件。

建议替代方案如下:

www.9778.com 2

微软认为随着进一步完善 Windows Forms
设计器项目,这些控件与创建现代应用不匹配,并且永远不应该成为 Windows
Forms .NET Core 版本的一部分。这样重大的变化,目标是继续改进 Windows
Forms,以实现更高的 DPI、可访问性和可靠性,并且利于后期更新的进行。

9. About Entity Framework Core RC2

For this reason, EF6.x will still be the most suitable choice for many
applications.

哈哈,上面这句话是亮点,所以,对于 Entity Framework Core RC2
来说,还是有一些问题的,我们在开发新项目的时候,如果需要保证项目的稳定性,尽量还是使用
EF 6.x 版本,那什么时候要用 Entity Framework Core RC2 呢?答案如下:

  • New applications that do not require features that are not yet
    implemented in EF Core
  • Applications that target .NET Core, such as Universal Windows
    Platform and ASP.NET Core applications

总的来说,如果项目中使用的是 EF 6.x 版本,那最好不要升级到 EF Core RC2
版本,因为中间的差异还是蛮大的,当然,如果项目很小,也是可以升级的,另外,新的项目如果是
.NET Core,最好还是使用 EF Core RC2,EF Core RC2 支持以下构建方式:

  • Full .NET (Console, WPF, WinForms, and ASP.NET 4)
  • Universal Windows Platform
  • ASP.NET Core
  • OSX
  • Linux

EF Core RC2 支持的数据库:

  • Microsoft SQL Server
  • SQLite
  • Postgres
  • SQL Server Compact Edition
  • InMemory (for testing purposes)

EF Core RTM 版本需要进行的工作:

  • Bug fixing
  • Performance tuning
  • Documentation

EF Core RC2
因为我还没用过,具体的特性还不清楚,但对于现在的版本,还是有一些问题的,简单的新项目可以暂时使用,大型项目就算了。

尽管用户仍需安装“C++ 桌面部署”和“C++ / CLI
支持”等组件才能工作,以及两个新的模板 —— CLI 类库(.NET Core)和 CLR
空项目(.NET Core)。

.NET Core 3.1 中的更改​​主要集中在 Blazor 和 Windows Desktop,这是 .NET
Core 3.0 中的两个新增特性,包括对 C++/CLI 的支持,这已经是开发 Windows 
的常规需求。

7. Support for RC1 and RC2 projects

www.9778.com 3

如何从 RC1 升级到 RC2?在创建 ASP.NET Core
应用程序的时候,会在解决方案的 Solution Items
目录下,生成一个global.json文件,配置如下:

{  "projects": [ "src", "test" ],  "sdk": {    "version": "1.0.0-rc1-final"  }}

如果需要升级到 RC2,我们需要将 version
版本修改为1.0.0-preview1-002702,如果不对 sdk
进行配置的话,默认将会使用 RC2 版本的 NET CLI tools。

最后,微软引入新版了 Blazor WebAssembly,增加了对 .NET Standard 2.1 和
iOS 13 的支持:

www.9778.com 4

(题图 via
Neowin)

10. .NET Core Tools

You typically start .NET Core development by installing the .NET Core
SDK. The SDK includes enough software to build an app. The SDK gives you
both the .NET Core Tools and a copy of .NET Core.

.NET Core SDK 和 .NET Core Tools 是什么关系?SDK
有点文档的含义,你可以认为 .NET Core SDK 包含 .NET Core Tools,但现在
.NET Core SDK 只包含 .NET Core Tools,.NET Core Tools
中最重要的一个工具就是
CLI,除了一些默认的命令外,你也可以添加自定义的命名,详见:simple
extensibility model

CLI
命令如下(

  • dotnet new – Initializes a sample console C# project.
  • dotnet restore – Restores the dependencies for a given
    application.
  • dotnet build – Builds a .NET Core application.
  • dotnet publish – Publishes a .NET portable or self-contained
    application.
  • dotnet run – Runs the application from source.
  • dotnet test – Runs tests using a test runner specified in the
    project.json.
  • dotnet pack – Creates a NuGet package of your code.

关于单元测试使用 xUnit,详见:Getting started with xUnit (.NET Core /
ASP.NET Core)

The dotnet tool replaces the dnx and dnu tools that came with RC1. The
dnvm tool doesn’t have a replacement yet. That’s something that might
come in a later release.

dnx 和 dnu 已经被 dotnet 命名替换掉了,但 dnvm
并没有,可能会出现在后面的发布中,补充:dnvm 是管理 dnx
的命令,以后可能会添加针对 .NET Core CLR 版本的命令,只是现在还没确定。

www.9778.com 5

6. Tooling Preview Support for .NET CLI

That’s exactly what we’ve done and packaged support for these tasks in
Visual Studio to make use of the dotnet tool.

在 ASP.NET Core RC2 版本中,我们可以在命令行中使用 CLI
进行还原程序包、构建和运行等任务,Visual Studio 现在也集成了 CLI
工具,我们可以很方便的在 Visual Studio 中使用 CLI。

www.9778.com 6

(文/cnBeta)    

4. What does Preview mean?

Remember that .NET Core has two main parts:

  • The Runtime/Libraries – This is the CLR, libraries, compilers, etc.
  • The Tooling – This is all the support in the .NET Core command line
    tools, Visual Studio and Visual Studio Code that enable you to work
    with .NET Core projects.

上面这段不需要翻译了,关于 .NET 跨平台的很多概念,我们很容易搞混淆,比如
.NET Core, .NET Framework 等等,.NET Core 包含
CoreCLR,、CoreFx、编译器、CLI、以及其它支持的工具,这里的工具并不是直接指的是
Visual Studio 或 Visual Studio Code,而是他们能让 .NET Core
应用程序运行的组件或工具。

We’re splitting the .NET Core “release train” so that those of you who
are waiting can go live on .NET Core 1.0 RC2 with confidence, while we
continue to deliver on our plans for the tooling:

  • The .NET Core 1.0 RC2 runtime is a true Release Candidate. It’s
    solid, stable, and it won’t change for RTM (except if something
    critical happens) and we feel good about it. It will have a
    “go-live” license, meaning you can get official support from
    Microsoft.
  • The tooling that supports .NET Core and ASP.NET Core, including the
    new command line tools and bits that plug into Visual Studio &
    Visual Studio Code, aren’t there yet. It’s going to change before it
    stabilizes. We’re going to call this tooling release Preview 1.

上面这段话包含的内容非常多,之前说了,.NET Core 其实是包含 Tooling
的,但这次 .NET Core RC2 的发布,Tooling 对应的版本是 preview
1,所以就像标题那样:.NET Core RC2 and .NET Core SDK Preview 1,微软是把
.NET Core 和 Tooling 的版本发布是分开的,虽然版本不一致,但其实都是 .NET
Core,这一点容易混淆,需要明确下,总感觉微软的这次发布是不得不发布的,就像他用了一个
splitting 词一样:分割发布,一个东西,两个版本

.NET Core 1.0 RC2
发布出来后,基本上就不会再进行改了,所以,我们现在就可以放心的在项目中使用它了,之前的
RC1 确实是太大的坑,在现有的 .NET Core 1.0 RC1 项目中,升级到 .NET Core
1.0 RC2 版本,这个工作量我想是蛮大的。

下面那句话,再次说了 Tooling 包含的东西,需要注意的是,CLI 属于 .NET
Core,准确的来说,CLI 属于 .NET Core 中的 Tooling,.NET Core 1.0 RC2
基本上不进行改了,具体指的是 CoreCLR,、CoreFx、编译器,但 Tooling
还是会进行修改的,所以,CLI 可能会进行修改,现在的版本命名为 Tooling
Preview 1。

www.9778.com 7

12. NuGet Package References

.NET Core is a platform of packages. You can see how these packages are
referenced in a set of simple .NET Core samples that we have published.
There are two metapackages that you will typically reference in your
project file, one or the other. One is for apps and libraries that will
only run on .NET Core and the other for libraries that you intend to run
on all .NET platforms.

.NET Core samples:

.NET Core 是平台程序包,什么意思?解释在下面那句话,一般 .NET Core
应用程序中会包含两种类型的程序包,一个是仅仅在 .NET Core
上跑的,另一个是你想跑在所有的 .NET
平台,这两种只能在应用程序中配置一种,这段描述看得我有些懵逼😂。

Most of the time, you will reference the Microsoft.NETCore.App package.
This package represents the same set of libraries that are shipped with
the various .NET Core installers. The .NET Core tools understand this
reference and can use the locally installed copy of .NET Core instead of
relying on the versions from NuGet.

Microsoft.NETCore.App程序包,一般在 .NET Core
应用程序中都需要进行引用的,.NET Core
会安装很多不同的版本,它的作用就是,在应用程序中指定使用某一种 .NET Core
版本。

  • The .NET Standard Library is a new concept that represents the APIs
    available in all .NET implementations, at least those that support
    it. The .NET Framework, .NET Core and Mono/Xamarin will or already
    do support the .NET Standard Library. The .NET Standard Library can
    be thought of as the next version of Portable Class Libraries, but
    the set of APIs available and the way you create the libraries are
    much different.
  • The set of APIs exposed by the .NET Standard Library is currently
    smaller than we intend. In the next few releases, we intend to
    expand this set of libraries considerably to provide much more
    compatibility with the .NET Framework. We’ll publish more on this
    plan soon.

.NET Standard Library
是一个新的概念,它的特点就是更小,并且标准更加统一,后面 .NET Framework
都会慢慢使用这种标准进行发布。

ASP.NET Core 1.0 RC2 中project.json示例配置:

{  "userSecretsId": "aspnet-WebApplication1-42c12a0f-14cf-4e10-b6ec-712743a0386b",  "dependencies": {    "Microsoft.NETCore.App": {      "version": "1.0.0-rc2-3002702",      "type": "platform"    },    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0-rc2-final",    "Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final",    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0-rc2-final",    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0-rc2-final",    "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",    "Microsoft.AspNetCore.Razor.Tools": {      "version": "1.0.0-preview1-final",      "type": "build"    },    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",    "Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final",    "Microsoft.EntityFrameworkCore.Tools": {      "version": "1.0.0-preview1-final",      "type": "build"    },    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc2-final",    "Microsoft.Extensions.Logging": "1.0.0-rc2-final",    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final",    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc2-final",    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {      "version": "1.0.0-preview1-final",      "type": "build"    },    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {      "version": "1.0.0-preview1-final",      "type": "build"    }  },  "tools": {    "Microsoft.AspNetCore.Razor.Tools": {      "version": "1.0.0-preview1-final",      "imports": "portable-net45+win8+dnxcore50"    },    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {      "version": "1.0.0-preview1-final",      "imports": "portable-net45+win8+dnxcore50"    },    "Microsoft.EntityFrameworkCore.Tools": {      "version": "1.0.0-preview1-final",      "imports": [        "portable-net45+win8+dnxcore50",        "portable-net45+win8"      ]    },    "Microsoft.Extensions.SecretManager.Tools": {      "version": "1.0.0-preview1-final",      "imports": "portable-net45+win8+dnxcore50"    },    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {      "version": "1.0.0-preview1-final",      "imports": [        "portable-net45+win8+dnxcore50",        "portable-net45+win8"      ]    }  },  "frameworks": {    "netcoreapp1.0": {      "imports": [        "dotnet5.6",        "dnxcore50",        "portable-net45+win8"      ]    }  },  "buildOptions": {    "emitEntryPoint": true,    "preserveCompilationContext": true  },  "runtimeOptions": {    "gcServer": true  },  "publishOptions": {    "include": [      "wwwroot",      "Views",      "appsettings.json",      "web.config"    ]  },  "scripts": {    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ],    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]  }}

好消息是,微软提供了一个表格来说明正在发生的变化,以便用户作出相应的调整。

1. We will continue to make changes and stabilize the tooling until it RTMs with VS “15”.

  • .NET Core and ASP.NET Core 1.0 RC2, Tooling Preview 1
  • .NET Core and ASP.NET Core 1.0 RTM, Tooling Preview 2

Tooling 是什么?这个后面说,当 ASP.NET Core 1.0
正式版发布的时候,Tooling 的版本大概是 Preview 2,标题中的说明是在
ASP.NET Core 1.0 正式版发布之后,Tooling 还会有一些改变,直到 Visual
Studio “15” 的 RTM 版本发布,现在 Visual Studio “15” 的版本是
Preview,相关介绍:Visual Studio “15” Preview Now Available,对于 Visual
Studio “15”,你可以把它当作 ASP.NET Core 1.0 是 ASP.NET
的全新实现一样,与 Visual Studio “15” 并行的版本是 Visual Studio 2015
Update 2,这两个 Visual Studio
完全不一样,从你电脑上可以同时安装这两个版本就可以看出,所以,Visual
Studio “15” 是 Tooling 的重点,也是微软下一步的重点。

另外,需要注意发布时间,.NET Core 和 ASP.NET Core 1.0
正式版最迟发布时间为2016年6月份(应该会在微软的 dotnetConf
会议上发布),但并不包含 Tooling 的正式版发布,当 .NET Core 和 ASP.NET
Core 1.0 正式稳定之后,下一步就是 Visual Studio “15”,包括 Tooling
中的其它工具。

.NET Core 3.1 中还剔除了 Windows
应用程序的某些窗体控件(已被功能更强大的后继者取代相当长的一段时间),这可能会破坏用户的某些项目。

  • Beta6: 2015年7月27日
  • Beta7: 2015年9月2日
  • Beta8: 2015年10月15日
  • RC1: 2015年11月
  • RC2 (Tools Preview 1): 2016年5月17日
  • 1.0.0 (Tools Preview 2): 最迟2016年6月份

● .NET Core 3.1
下载地址 |
变更日志

● ASP .NET
Core(GitHub)传送门

3. Unifying the frameworks and the tooling

  • We also need to make it easy to work with projects across these
    application models. In order to do this we are working to merge the
    capabilities of .xproj/project.json and .csproj project systems into
    a single project system based on MSBuild. This transition will be
    automatic and will not require you to change your existing projects.
    This work will happen during the VS 15 release schedule and we will
    release another blog post with more details.

除了上面的这段话,关于“统一框架和工具”节点,还有两句话,其意思就是统一构建的方式,主要针对跨平台应用程序。

现在针对 .xproj/project.json 和 .csproj
应用程序的构建是不同的,上面的意思就是统一基于 MSBuild
的构建方式,并且保证不影响现在已有的应用程序,这部分改进包含在 Visual
Studio “15” 中,所以还是那句话,Visual Studio “15”
是微软下一步的重点,我们需要重点关注下。

评论中关于这部分的讨论很激烈😏。

不出所料的是,.NET Core 3.1 的变更日志很小。唯一新增的功能,就是支持在
Visual Studio 2019 中创建针对 .NET
Core 的 C++ / CLI 组件。

13. .NET Core RC2 and .NET Core SDK Preview 1 Releases

发布包含:

  • .NET Core RC2
  • ASP.NET Core RC2
  • .NET Core RC2 SDK Preview 1

下载安装地址: ,如果安装了
Visual Studio 2015 Update 2,只需要安装两个东西:

  • Visual Studio official MSI Installer
  • NuGet Manager extension for Visual Studio

11. .NET Core App Types

We’ve talked to many customers about how they want to deploy apps. We
heard two main models:

  • Deploy smaller apps that have a dependency on a centrally installed
    .NET Core version, perhaps used by multiple apps. We call this model
    “portable”.
  • Deploy larger self-contained apps that have no .NET Core
    dependencies. We call this model “self-contained”.

在 .NET Core RC1
版本的时候,应用程序文件一般都是和运行时一块打包的,放在发布文件的packages目录下,虽然这样有很多好处,比如运行时和基础类库是独立的,并且在每个应用程序中都是隔离的,隔离的好处就是可以单独进行管理,并且出现问题只在本应用程序中,但这样的方式就会有个问题,应用程序的发布文件会很大。

上面的部署方式,称之为“self-contained”,在 .NET Core RC2
版本中,除了这种部署方式,还提供了一种叫“portable”的方式,这种就我们之前部署
ASP.NET
应用程序一样了,只包含应用程序文件,运行时和基础类库都放在统一的地方,以供不同的应用程序使用,两种方式有好有坏,自己可以权衡使用。

5. ASP.NET Core is a console app

www.9778.com 8

This migration from a class library that is designed to be run on the
DNX to a console application with a Program.cs and a Main method that
can be run by a new .NET toolchain is one of the most significant
changes that RC2 brings to ASP.NET Core.

上面这段叙述是概括性文字,在之前有几段文字是详细说明,ASP.NET Core 1.0
RC1 应用程序是 Class Library,并且项目中有一个Startup.cs文件,DNX
对应的工具进行启动它,而 ASP.NET Core 1.0 RC2 却是 Console
App,并且移除了Startup.cs增加了Program.cs文件,为什么要这样改变?其实在上面的介绍中已经进行说明了,我个人觉得就是微软将
DNX 和 .NET Core CLR 进行了统一,而导致了 ASP.NET Core 1.0 RC2
的改变,ASP.NET 跨平台不应该对应一个独立的 CLR 实现,它应该只是 .NET
跨平台的一种,将 ASP.NET Core 1.0 改为 Console App
之后,就更加统一了,就像这句话一样:This alignment means that a single
.NET toolchain can be used for both .NET Core Console applications and
ASP.NET Core applications.

www.9778.com 9

上面这张图很好的表现了 .NET Core 和 .NET Core Applications 的关系,.NET
Core 是金字塔的低层,是所有 .NET Core Applications 的基础,再往上除了
ASP.NET Core 之外,还应该再加其它的 Applications,比如 .NET Core Console
等,Visual Studio 是开发它们的工具之一,位于金字塔的最上层。

为什么 .NET Core RC1 到 RC2
发布耗时这么长时间?之前的新闻和文章已经介绍很多了,就不多说了,改变实在是大,其实你也可以从某种意义上看作是一个全新实现。

先看一下 .NET Core(包含 ASP.NET Core)的路线图:

相关博文:

8. .NET Core Templates

www.9778.com 10

Visual Studio 2015 Update 2 中 .NET Core 项目模版如上图,.NET Core 和
.NET Framework 的 Web Application
依旧是分隔的,下面还有兼容版本的模版,“a .NET Core compatible class
library that compiles to a NuGet package.”这句话不是太懂。

ASP.NET Core Web Application(.NET Framework) 模版的意思是,Windows 下的
.NET Core Web Application 项目,也就是只适用于 Windows 平台。

左边 .NET Core 包含三个模版:

  • Class Library(.NET Core)
  • Console Application(.NET Core)
  • ASP.NET Core Web Application(.NET Core)

2. How We Got Here

  • The ASP.NET team started two and a half years ago, building a new
    version of ASP.NET that was modular, cross platform, and
    high-performance. This new version of ASP.NET was built on a new
    .NET Execution Environment that was optimized for modern
    cloud-focused workloads (websites, microservices, etc.). We shipped
    an RC1 of those bits in November.
  • After shipping ASP.NET Core 1.0 RC1, it was very important to
    broaden .NET Core to also support building native console
    applications. So we started the process of reworking the tool chain
    so it could be used to build .NET console, class libraries and
    server applications. This process has proved to be harder than we
    anticipated and led to us removing dates for RC2/RTM from our
    schedule in February.

上面是两段话,我都贴出来了,我个人觉得很有价值,你可以从中揣摩微软的心思和了解
ASP.NET 跨平台的历史。

首先,第一段话的意思:ASP.NET 团队在两年半之前就开始开发 ASP.NET
的跨平台实现了,那时候被叫做 ASP.NET vNext,然后对应一个专门的运行时
XRE,然后被改名为 KRE,后来在 ASP.NET 5 RC1 的时候,又被改名为
DNX,需要注意的时候,DNX 运行时只适用于当时的 ASP.NET 5
RC1,并不适用于其它的微软产品,所以,我们在当时的 Visual Studio 2015
中,看到创建 ASP.NET 5 的模版是独立出来的,叫 ASP.NET 5 Web Application
和 ASP.NET 5 Class Library,ASP.NET 5 RC1 的发布时间时2015年11月份。

上面都是前提介绍,重点在于第二段话,在 ASP.NET 5 RC1
发布之后,微软意识到 .NET Core 支持构建 Native Console Application
是非常重要(注意是 .NET Core,并不是 DNX),那时候的 .NET Core 是独立于
ASP.NET 5 RC1 的,也就是 ASP.NET 5 RC1 的运行时并不是使用的 .NET
Core,后来微软开始重写工具链,以支持构建 .NET console、Class Libraries
和 Server Applications,也就是把 .NET Core 和 DNX
统一起来,准确来说,就是把 DNX 归到 .NET Core
中,并且对应的相应工具也要进行调整,比如那时候 ASP.NET 5 RC1
对应的工具是 dnvm 和 dnpm,现在来看,都归到统一的 CLI 中了,并且 ASP.NET
5 的名称也不太准确,会让人误以为是 ASP.NET 4.6 的进阶版,但其实是
ASP.NET 的全新实现,所以,这个名称需要改,最后确定改为 ASP.NET Core。

原本 ASP.NET Core RC2/RTM
的发布是在2016年的2月份,但微软在开发上面任务的时候,发现工作难度和工作量实在太大,所以就推迟了
ASP.NET Core RC2/RTM
的发布,每件东西的改变,都有着背后的历史,事出总有因,了解完这些背后的东西,我们就会更加体谅微软了,并且,改变是进步的体现,需要点个赞👍!

另外,RC1 升级到 RC2 相关文章:

  • Migrating from DNX to .NET Core
  • Migrating from ASP.NET 5 RC1 to ASP.NET Core 1.0 RC2
  • Migrating your Entity Framework Code from RC1 to RC2

言归正传,在昨天凌晨的时候,微软官方博客发布了几篇文章,我觉得除了包含
.NET Core RC2
的发布消息以外,文章内容还是非常有价值的,从某些文字和某段话中,我们可以得到一些容易被忽略的东西,所以,这几篇博文我又重新认真读了下,希望把有些有价值的地方,分享给大家。