.NET Core 工具中变更的高级概述High-level overview of changes in the .NET Core tools

.NET Core 工具的最大变更无疑是 作为项目系统。最新版本的命令行工具不支持 project.json 文件。这意味着它不能用于生成、运行或发布基于 project.json 的应用程序和库。若要使用此版本的工具,需要迁移现有项目或启动新的项目。

作为此次移动的一部分,开发用于生成 project.json 项目的自定义生成引擎被替换为一个功能完整的成熟生成引擎,即 MSBuildMSBuild 是.NET 社区中的知名引擎,因为自该平台首个版本以来,它一直作为一项关键技术。当然,因为它需要生成 .NET Core 应用程序,所以 MSBuild 已经移植到 .NET Core,并可在 .NET Core 运行的任何平台上使用。.NET Core 的一个主要的好处是跨平台开发堆栈,我们已确保本次迁移不会破坏此好处。

备注

如果还不熟悉 MSBuild,并且想要了解相关详细信息,可参阅 一文。

工具层The tooling layers

随着弃用现有项目系统以及改换生成引擎,自然会出现一个疑问:这些更改会改变整体 .NET Core 工具生态系统的整体“分层”吗?是否有新的位和组件?

首先来简要介绍下预览版 2 分层,如下图所示:

随着迁移到新的项目系统,之前的图表会更改:

.NET Core SDK 1.0.0 高级体系结构

主要区别在于 CLI 不再作为基础层;现由“共享 SDK 组件”充当此角色。共享 SDK 组件是一组负责编译代码、发布代码、打包 NuGet 包等操作的目标和关联任务。SDK 本身是一个开源代码,可在 GitHub 上的 SDK 存储库中获得。

备注

“目标”是一个表示 MSBuild 可调用的已命名操作的 MSBuild 术语。其通常伴随着执行此目标应执行的某个逻辑的一个或多个任务。MSBuild 支持多个现成的目标,如 CopyExecute;它还允许用户使用托管代码编写自己的任务,并定义要执行这些任务的目标。有关详细信息,请参阅 。

现在所有工具集使用共享 SDK 组件及其目标,包括 CLI。例如,下一版 Visual Studio 不会调用 dotnet restore见备注)命令来还原 .NET Core 项目的依赖关系,而是直接使用“还原”目标。由于这些皆是 MSBuild 目标,因此你也可通过 命令使用原始 MSBuild 来执行。

CLI 命令CLI commands

共享 SDK 组件意味着大部分现有 CLI 命令已重新实现为 MSBuild 任务和目标。这对 CLI 命令和工具集的使用意味着什么?

  • new
  • restore
  • run
  • publish
  • test
  • pack这些命令的作用没有发生改变(仍可新建项目、生成项目、发布项目、打包项目等等)。大部分选项并未更改,仍和以前一样。可以使用 dotnet <command> —help 查看相应命令的帮助屏幕,也可以参阅此网站上的文档来熟悉所有更改。

从执行角度而言,CLI 命令会采用其参数并构造对“原始”MSBuild 的调用,从而设置所需属性和运行所需目标。为更好的说明这点,请参考下面的命令:

dotnet publish -o pub -c Release

此命令会使用“发布”配置将应用程序发布到 pub 文件夹。在内部,此命令会转换成下面的 MSBuild 调用:

此规则值得注意的例外是 newrun 命令,因为它们未实现为 MSBuild 目标。

备注