獨立的 .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-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 個資料夾,並準備好部署到任何我想要的系統。
您可以在 Win10 資料夾中看到我的「MYAPPLICATION.exe」(我的叫做 scd.exe)可以直接執行,而並非像開發者那樣需要用「dotnet run」來執行。
在 .NET Core Docs 裡有許多不錯的文章,教您如何為您的 self contained 應用程式調整與精準地定義要部署什麼。您可以對 .NET Core 做大量的修整,而有人說在未來那將會變得越來越自動化,有可能下到方法等級。
本文翻譯自 Self-contained .NET Core Applications
若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922