.NET Core 編程指南中文版 —— 6.1 CLI 變更概述 -> .NET Core 工具中變更的高級概述

.NET Core 工具中變更的高級概述

此文檔介紹了與從 project.json 移動到 MSBuild 和 csproj 項目系統有關的更改,其中包含關於 .NET Core 工具的分層和 CLI 命令的實現的更改的信息。 這些更改與 2017 年 3 月 7 日 .NET Core SDK 1.0 和 Visual Studio 2017 的發佈同時發生(請參閱通知),但是最初是在 .NET Core SDK 預覽 3 版本中實現的。

棄用 project.json

.NET Core 工具的最大變更無疑是棄用 project.json,改用 csproj 作爲項目系統。 最新版本的命令行工具不支持 project.json 文件。 這意味着它不能用於生成、運行或發佈基於 project.json 的應用程序和庫。 若要使用此版本的工具,需要遷移現有項目或啓動新的項目。

作爲此次移動的一部分,開發用於生成 project.json 項目的自定義生成引擎被替換爲一個功能完整的成熟生成引擎,即 MSBuild。 MSBuild 是.NET 社區中的知名引擎,因爲自該平臺首個版本以來,它一直作爲一項關鍵技術。 當然,因爲它需要生成 .NET Core 應用程序,所以 MSBuild 已經移植到 .NET Core,並可在 .NET Core 運行的任何平臺上使用。 .NET Core 的一個主要的承諾是跨平臺開發,我們已確保本次遷移不會破壞此承諾。

 備註

如果還不熟悉 MSBuild,並且想要了解相關詳細信息,可參閱 MSBuild 概念一文。

工具層

隨着棄用現有項目系統以及改換生成引擎,自然會出現一個疑問:這些更改會改變整體 .NET Core 工具生態系統的整體“分層”嗎? 是否有新的位和組件?

首先來簡要介紹下預覽版 2 分層,如下圖所示:

預覽版 2 工具高級體系結構

這些工具的分層非常簡單。 在底部,我們將 .NET Core 命令行工具作爲基礎。 其他所有高級工具(如 Visual Studio 或 Visual Studio Code)依靠 CLI 來生成項目、還原依賴項以及完成其他操作。 也就是說,例如,如果 Visual Studio 要執行還原操作,它會在 CLI 中調用 dotnet restore見備註)命令。

隨着遷移到新的項目系統,之前的圖表會更改:

.NET Core SDK 1.0.0 高級體系結構

主要區別在於 CLI 不再作爲基礎層;現由“共享 SDK 組件”充當此角色。 共享 SDK 組件是一組負責編譯代碼、發佈代碼、打包 NuGet 包等操作的目標和關聯任務。SDK 本身是一個開源代碼,可在 GitHub 上的 SDK 存儲庫中獲得。

 備註

“目標”是一個 MSBuild 術語,表示 MSBuild 可調用的已命名操作。 其通常伴隨着執行此目標應執行的某個邏輯的一個或多個任務。 MSBuild 支持多個現成的目標,如 Copy 或 Execute;它還允許用戶使用託管代碼編寫自己的任務,並定義要執行這些任務的目標。 有關詳細信息,請參閱 MSBuild 任務

現在所有工具集使用共享 SDK 組件及其目標,包括 CLI。 例如,下一版 Visual Studio 不會調用 dotnet restore見備註)命令來還原 .NET Core 項目的依賴關係,而是直接使用“還原”目標。 由於這些皆是 MSBuild 目標,因此你也可通過 dotnet msbuild 命令使用原始 MSBuild 來執行。

CLI 命令

共享 SDK 組件意味着大部分現有 CLI 命令已重新實現爲 MSBuild 任務和目標。 這對 CLI 命令和工具集的使用意味着什麼?

從使用角度而言,它不會更改使用 CLI 的方式。 CLI 仍具有預覽 2 版本中存在的核心命令:

  • new
  • restore
  • run
  • build
  • publish
  • test
  • pack

這些命令的作用沒有發生改變(仍可新建項目、生成項目、發佈項目、打包項目等等)。 大部分選項並未更改,仍和以前一樣。可以使用 dotnet <command> --help 查看相應命令的幫助屏幕,也可以參閱此網站上的文檔來熟悉所有更改。

從執行角度而言,CLI 命令會接受其參數並構造對“原始”MSBuild 的調用,從而設置所需屬性和運行所需目標。 爲更好的說明這點,請參考下面的命令:

dotnet publish -o pub -c Release

此命令會使用“發佈”配置將應用程序發佈到 pub 文件夾。 在內部,此命令會轉換成下面的 MSBuild 調用:

dotnet msbuild -t:Publish -p:OutputPath=pub -p:Configuration=Release

此規則值得注意的例外是 new 和 run 命令,因爲它們未實現爲 MSBuild 目標。

 備註

從 .NET Core 2.0 SDK 開始,無需運行 dotnet restore,因爲它由所有需要還原的命令隱式運行,如 dotnet newdotnet build 和 dotnet run。 在執行顯式還原有意義的某些情況下,例如 Azure DevOps Services 中的持續集成生成中,或在需要顯式控制還原發生時間的生成系統中,它仍然是有效的命令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章