Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
提醒您 .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