.NET Core CLI命令列介面
.NET Core Command-Line Interface 是開發.NET應用程式的基礎開發工具。
安裝.NET Core CLI
有兩種方式安裝CLI:
- 通過下載安裝包,適用於開發環境,要用到本機的管理員許可權
- 通過shell指令碼,適用於伺服器環境
CLI命令
dotnet工具(稱為驅動程式)作為cli命令的入口,能夠接收並執行命令。同時,它可以選擇要使用的cli的sdk版本,如果未指定版本,預設使用最新的sdk版本。如果要指定版本使用dotnet --fx-version <version>
命令,dotnet只做兩件事:
-
執行命令
,格式如下:
dotnet command option
,比如:新建一個mvc工程命名為Zebra.Liu.MVC,dotnet new mvc -n Zebra.Liu.MVC
-
執行程式
,格式如下:
dotnet /build/my_app.dll
dotnet命令大致可以分為以下幾類:
-
常規命令,如
dotnet new
,dotnet build
,dotnet run
等 -
工程類命令
-
專案之間的引用,
dotnet add reference
,dotnet list reference
,dotnet remove reference
-
專案的包管理,
dotnet add package
,dotnet remove package
-
專案之間的引用,
-
其他命名,如使用ef,
dotnet ef
,啟動檔案觀察程式dotnet watch
等
常用命令
dotnet build命令
#建立MVC工程 [zebra Desktop]$mkdir work && cd work [zebra work]$dotnet new console -n Zebra.Liu.Console #新增Nuget包,這是添加了mysql的驅動包 [zebra work]$cd Zebra.Liu.Console/ [zebra Zebra.Liu.Console]$dotnet add package Pomelo.EntityFrameworkCore.MySql [zebra Zebra.Liu.Console]$ls Program.cs Zebra.Liu.Console.csprojobj #編譯工程,輸出到build資料夾中 [zebra Zebra.Liu.Console]$dotnet build -o build/ [zebra Zebra.Liu.Console]$ls Program.cs Zebra.Liu.Console.csproj build obj #多了一個build資料夾,用於存放編譯後的檔案 [zebra Zebra.Liu.Console]$ls build/ Zebra.Liu.Console.dll#二進位制檔案(中間語言IL) Zebra.Liu.Console.pdb#symbol檔案,用於除錯 Zebra.Liu.Console.deps.json # *.deps.json中列出應用程式的依賴項 Zebra.Liu.Console.runtimeconfig.dev.json Zebra.Liu.Console.runtimeconfig.json # 指定共享執行時以其版本
上面的試驗可以看出build命令最後的產物,如果有專案使用了第三方的依賴,如像上面一樣使用了NuGet中的SQL/">MySQL驅動,那麼在執行build命令時,只會從本機的NuGet快取庫中解析依賴項,也就是說,生成的dll檔案,不包含MySQL的驅動。這樣build的dll檔案,從本機拷貝到另外的機器上,可能不能執行。如果要將依賴項也打包,可以使用另一個命令dotnet publish
。
publish命令和build命令最大的區別在於:publish命令將應用程式的依賴項,從NuGet快取複製到輸出資料夾中。
build後的程式是否為可執行,主要看.csproj檔案中的選項
<!-- .csproj檔案內容 --> <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <!-- OutputType 輸出型別設定為Exe,說明這個工程,可執行 可執行的dll和不可執行的dll檔案最大的區別在於,有沒有入口點以及是否可執行 --> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.1</TargetFramework> </PropertyGroup> </Project>
dotnet clean命令
清除上一個生成的輸出,包括中間資料夾(obj)和最終輸出資料夾(bin)中的檔案
dotnet sln命令
使用dotnet sln命令,可以在*.sln,檔案中新增,刪除,獲取專案。
dotnet sln [<solution_name>] add <project> <project> dotnet sln [<solution_name>] add <globbing_pattern> dotnet sln [<solution_name>] remove <project> <project> dotnet sln [<solution_name>] remove <globbing_pattern> dotnet sln [<solution_name>] list
注意:dotnet sln
命令只會對solution_name.sln檔案中操作,要生成*.sln檔案,可以使用dotnet new sln
命令
dotnet add/remove/list reference命名
管理專案之間的引用關係
# 專案1引用專案2 [zebra work]$dotnet add 專案1 reference 專案2
使用CLI建立多專案的解決方案
本章將用cli,按照DDD的分層架構來建立包含多個專案的解決方案,方案的結構大致如下:
# 工程目標結構 - Shopping.sln |- Shopping.UI |- Shopping.Application |- Shopping.Domain |- Shopping.Infrastructure # 工程引用關係 Shopping.UI | V Shopping.Application |\ V\ Shopping.Domain\ |\ VV Shopping.Infrastructure
指令碼如下:
# 建立目錄 [zebra ~]$mkdir Shopping && cd Shopping # 建立工程 UI為MVC型別,其餘全部是classlib [zebra Shopping]$dotnet new mvc -n Shopping.UI [zebra Shopping]$dotnet new classlib -n Shopping.Application [zebra Shopping]$dotnet new classlib -n Shopping.Domain [zebra Shopping]$dotnet new classlib -n Shopping.Infrastructure # 新增工程之間的引用 [zebra Shopping]$dotnet add Shopping.UI reference Shopping.Application [zebra Shopping]$dotnet add Shopping.Application reference Shopping.Domain [zebra Shopping]$dotnet add Shopping.Application reference Shopping.Infrastructure [zebra Shopping]$dotnet add Shopping.Domain reference Shopping.Infrastructure # 建立Shopping.sln檔案,將工程檔案加入到解決方案(.sln)檔案中 [zebra Shopping]$dotnet new sln -n Shopping [zebra Shopping]$dotnet sln add Shopping.* # 新增NuGet依賴包,這裡以在Shopping.Infrastructure工程中新增MySQL驅動為例 [zebra Shopping]$cd Shopping.Infrastructure/ [zebra Shopping.Infrastructure]$dotnet add package Pomelo.EntityFrameworkCore.MySql