使用 .NET Core SDK 建立

除了 Console app 扮演 client 的角色,另外一個常見需求就是建立自己的 class library,我們可以使用 ng new classlib 建立 class library 型態專案。

Version


macOS High Sierra 10.13.3
.NET Core SDK 2.1.101

建立 Class Library 專案


1
$ dotnet new classlib -o MyClassLib

使用 dotnet new 建立 project。

  • classlib : 建立 class library 類型專案
  • -o : o output,建立在 MyClassLib 目錄下

ib00

  1. 輸入 dotnet new classlib -o MyClasLib 將 class library 類型專案建立在 MyClassLib 目錄下
  2. .NET Core SDK 開始建立專案所需的檔案
  3. 自動 restore dependency

使用 VS Code 開啟專案


1
$ code MyClassLib

使用 code 執行 VS Code,後面接開啟目錄名稱。

ib00

  • 使用 VS Code 開啟 MyClassLib

編輯 CalculatorService.cs


CalculatorService.cs

1
2
3
4
5
6
7
8
9
10
11
12
using System;

namespace MyClassLib
{
public class CalculatorService
{
public int Sum(int x, int y)
{

return x + y;
}
}
}

建立 CalculatorService,並有一個 Sum()

ib00

  1. 開啟 CalculatorService.cs
  2. 建立 Sum()

編譯 Class Library


1
~/MyClassLib $ dotnet build -c Release

使用 dotnet build 編譯專案。

  • -c : configuration,預設 dotnet build 是以 Debug 模式編譯,若要以 Release 編譯,需要配合 -c 參數

ib00

  1. 輸入 dotnet build -c ReleaseRelease 模式編譯
  2. 自動執行 dotnet restore
  3. 最後 build 出 MyClassLib.dll

注意是 build 到 Release 目錄

使用 MSBuild

1
~/MyClassLib $ dotnet msbuild /p:Configuration=Release

使用 msbuild 編譯專案。

ib00

  1. 輸入 dotnet msbuild /p:Configuration=ReleaseRelease 模式編譯
  2. 最後 build 出 MyClassLib.dll

注意使用 MSBuild 時,並沒有執行 dotnet restore

建置 NuGet Package


1
~/MyClassLib $ dotnet pack -c Release

使用 dotnet pack 將 class library 打包成 Nuget package。

  • -c : configuration,預設 dotnet pack 是以 Debug 模式打包,若要以 Release 打包,需要配合 -c 參數

ib00

  1. 輸入 dotnet pack -c ReleaseRelease 模式打包
  2. 最後 build 出 MyClassLib.1.0.0.nupkg
  3. bin/Release/ 會看到 MyClassLib.1.0.0.nupkg

發佈 Class Library


1
~/MyClassLib $ dotnet publish -c Release

使用 dotnet publish 將編譯後的 dll 與其 dependency 整理到 publish 目錄,將來只要將此目錄 deploy 到 server 即可。

  • -c : configuration,預設 dotnet publish 是將 Debug 模式的 dll 整理至 publish 目錄,若要整理 Release 模式的的 dll,需要配合 -c 參數

![ib00](/images/netcore/classlib

  1. 輸入 dotnet publish -c Release 將欲 deploy 的檔案整理到 bin/Release/netcoreapp2.0/publish 目錄
  2. 我們發現總共有 3 個檔案
    • MyClassLib.dll : 以 IL 為內容的 assembly
    • MyClassLib.deps.json : 描述執行 dll 所需要的 dependency
    • MyClassLib.pdb : 在 production 環境啟動 debug 時使用

使用 MSBuild

1
~/MyClassLib $ dotnet msbuild /t:Publish /p:Configuration=Release

使用 msbuild 發佈專案。

ib00

  1. 輸入 dotnet msbuild /t:Publish /p:Configuration=ReleaseRelease 發佈
  2. 一樣發布 3 個檔案

注意使用 MSBuild 時,並沒有執行 dotnet restore

Conclusion


  • Class library 與 console app 的建置模式並沒有什麼差別,因為 console app 其實也是 dll
  • 一樣可以使用 MSBuild 編譯與發佈 class library,但不會事先執行 dotnet restore
2018-03-16