使用 .NET Core SDK 建立 Solution

對於大型專案,我們可以建立 solution 管理眾多 project,只要對 solution 下 dotnet build ,就可以全部 project 都一起 build。

Version


macOS High Sierra 10.13.3
.NET Core SDK 2.1.101

建立 Solution


1
$ dotnet new sln -n MySolution

使用 dotnet new sln 建立 solution。

  • -n : 建立 .sln 檔案即可,不用建立目錄

Solution 是 Microsoft 技術特別的觀念,算 project 的集合,一個 solution 可以有多個 project

sln00

  1. 輸入 dotnet new sln -n MySolution 在目前目錄建立 MySolution.sln
  2. 已建立 MySolution.sln 在目前目錄下

將 Project 加入 Solution


macOS/Linux

1
$ dotnet sln MySolution.sln add **/*.csproj

使用 dotnet sln … add 將 project 加入 solution

**/*.csproj 表示目前目錄下 所有子目錄cspoj

ln00

  1. 輸入 dotnet sln MySolution.sln add **/*.csproj 將目前目錄下的所有 project 都加入 MySolution.sln

Windows

1
2
3
$ dotnet sln MySolution.sln add MyConsole/MyConsole.csproj
$ dotnet sln MySolution.sln add MyClassLib/MyClassLib.csproj
$ dotnet sln MySolution.sln add MyClassLib.Tests/MyClassLib.Tests.csproj

Windows 只能乖乖地用 3dotnet sln … add

ln00

  1. 一個一個 project 加入 MySolution.sln

編譯整個 Solution


1
$ dotnet build MySolution.sln

使用 dotnet build 將 solution 下所有 project 一起編譯。

ln00

  1. 輸入 dotnet build MySolution.sln 編譯整個 MySolution
  2. MySolution 下所有 project 都執行 dotnet restore
  3. MySoluton 下所有 project 都執行 dotnet build 編譯新的 dll

將整個 Solution 建立 Package


1
$ dotnet pack MySolution.sln

使用 dotnet pack 將 solution 下所有 project 建立 NuGet package。

ln00

  1. 輸入 dotnet pack MySolution.sln 將整個 MySolution 建立 package
  2. MySolution 下所有 project 都執行 dotnet restore
  3. MySoluton 下所有 project 都執行 dotnet pack

只有 MyConsoleMyClassLib 會建立 package,MyClassLib.Tests 因為是 Unit Test,所以不會建立 package

發佈整個 Solution


1
$ dotnet publish MySolution.sln

使用 dotnet publish 將 solution 下所有 project 都加以 publish。

ln00

  1. 輸入 dotnet publish MySolution.sln 將整個 MySolution 下的所有 project 都加以 publish
  2. MySolution 下所有 project 都執行 dotnet restore
  3. MySoluton 下所有 project 都執行 dotnet publish

其他相關指令


1
$ dotnet sln *.sln remove *.csproj

將 project 從 solution 移除。

1
$ dotnet sln *.sln list

列出 solution 共有哪些 project。

Conclusion


  • Solution 在 .NET Core SDK 中,重要性已經不如 Visual Studio,但對於大型專案,卻可透過 solution 對所有 project 下指令,還是非常好用
  • VS Code 不一定要使用 solution,但若專案也需要被 Visual Studio 或 Rider 開啟,則建議建立 solution
2018-03-17