獨立的 .NET Core 應用程式

提醒您 .NET 是完全開源的,而且 .NET Core 是一個您可以免費下載的開源與跨平台 framework。您可以到 https://dot.net 取得它,在 Mac、Windows 與大多數的 Unix 系統都可以使用。順帶還可以使用免費、跨平台的 Visual Studio Code,讓您可以隨時隨地撰寫 C# 與 F#。

有兩個方式來部署一個 .NET Core 應用程式,FDD 與 SCD。三個字的縮寫可能看不懂,它們的意思是 Framework-dependent 與 Self-contained。當 .NET Core 安裝在 Windows 中,它會存放在 C:\Program Files\dotnet。在「shared」資料夾內會有一堆可以分享的 .NET 檔案。這裡可以有多個資料夾,就如同下圖,您可以看到我的資料夾。您可以有多個 .NET Core 的安裝。

當您安裝您的應用程式與它的 dependencies 其中並不包含 .NET Core 本身,您會需要目標機器上已經有安裝 .NET Core。對於 Web App 或有很多應用程式的系統來說並沒有什麼問題,但如果我想要寫一個應用程式,而且只用一個 zip 檔給你或在隨身碟上,我就想要它能運作。我就會將 .NET Core 包含在其中,而整個東西就是 Self Contained 部署。

而這樣將會使我的「Hello World」應用程式大小變得比我使用現存的 system-wide 安裝還大,但我知道它就是可以 Work,因為它會是完全獨立的。

self-1

如果我以 self-contained 的方式來部署我的應用程式,有一點很重要的是,我將會有責任要維護 .NET Core 並讓它保持在最新的版本。我還需要提前決定我的目標平台。如果我想要讓它在 Windows、Mac 與 Linux 上執行成功,那我就需要囊括那些目標平台並為它們建置部署套件。這些大多都很直觀,不過還是知道一下比較好。

我將拿我的小小應用程式(我只是用一個「dotnet new」的應用程式)並在文字編輯器中修改 project.json。

我的應用程式是一個 .NETCore.App,但它不會使用已經安裝的 .NET Core 平台。它將使用本機的版本,所以我從這個 dependency 刪除「type=’platform’」。

 "frameworks": {
  "netcoreapp1.0": {
    "dependencies": {
      "Microsoft.NETCore.App": {
        "version": "1.0.1"
      }
    }
  } 
}

接下來我寫了一個 runtimes 的部分來指定我想要針對的平台。而這裡有一個全部 Runtime ID 的清單。

 "runtimes": {
     "win10-x64": {},
     "osx.10.10-x64": {},
     "ubuntu.14.04-x64": {}
   }

在執行「dotnet restore」您會想要像這樣建置他們:

 dotnet build -r win10-x64
dotnet build -r osx.10.10-x64
dotnet build -r ubuntu.14.04-x64

然後在您測試之後,發行釋出版本。

 dotnet publish -c release -r win10-x64
dotnet publish -c release -r osx.10.10-x64
dotnet publish -c release -r ubuntu.14.04-x64

一旦這個完成後,我就讓我的應用程式獨立在 n 個資料夾,並準備好部署到任何我想要的系統。

self-2

您可以在 Win10 資料夾中看到我的「MYAPPLICATION.exe」(我的叫做 scd.exe)可以直接執行,而並非像開發者那樣需要用「dotnet run」來執行。

self-3

.NET Core Docs 裡有許多不錯的文章,教您如何為您的 self contained 應用程式調整與精準地定義要部署什麼。您可以對 .NET Core 做大量的修整,而有人說在未來那將會變得越來越自動化,有可能下到方法等級。

 

本文翻譯自 Self-contained .NET Core Applications


netcore

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922