.Net Core的跨平臺(tái)發(fā)布
首先定位到項(xiàng)目的.csproj文件襟诸,然后使用文本編輯器打開司致。在名為<PropertyGroup>的XML父節(jié)點(diǎn)中加入名為<RuntimeIdentifiers>的子節(jié)點(diǎn)鸥昏。
<PropertyGroup>
? ? <OutputType>Exe</OutputType>
? ? <TargetFramework>netcoreapp2.1</TargetFramework>
????<RuntimeIdentifiers>ubuntu.16.04-x64;linux-x64;win-x64;linux-arm</RuntimeIdentifiers>
</PropertyGroup>
這個(gè)<RuntimeIdentifiers>的作用就是告訴編譯器存和,這個(gè)項(xiàng)目可以編譯在哪些平臺(tái)下爽哎。當(dāng)然蜓席,這些平臺(tái)名稱可不是隨意起名的。.Net Core支持的平臺(tái)如下:
Windows:
Windows 7 SP1
Windows 8.1
Windows 10 周年更新(版本 1607)或更高版本
Windows Server 2008 R2 SP1(完全服務(wù)器或服務(wù)器核心)
Windows Server 2012 SP1(完全服務(wù)器或服務(wù)器核心)
Windows Server 2012 R2(完全服務(wù)器或服務(wù)器核心)
Windows Server 2016 或更高版本(完全服務(wù)器倦青、服務(wù)器核心或 Nano Server)
Linux:
.NET Core 2.x 將 Linux 視為一個(gè)操作系統(tǒng)瓮床。?支持的 Linux 分發(fā)都對(duì)應(yīng)有一個(gè) Linux 內(nèi)部版本(根據(jù)芯片體系結(jié)構(gòu))。
以下 Linux 發(fā)行版本/版本支持 .NET Core 2.x:
Red Hat Enterprise Linux 7产镐,6 - 64 位(x86_64?或?amd64)
CentOS 7 - 64 位(x86_64?或?amd64)
Oracle Linux 7 - 64 位(x86_64?或?amd64)
Fedora 28隘庄、27 - 64 位(x86_64?或?amd64)
Debian 9(64 位,arm32)癣亚、8.7 或更高版本 - 64 位(x86_64?或?amd64)
Ubuntu 18.04(64 位丑掺,arm32)、16.04述雾、14.04 - 64 位(x86_64?或?amd64)
Linux Mint 18街州、17 - 64 位(x86_64?或?amd64)
openSUSE 42.3 或更高版本 - 64 位(x86_64?或?amd64)
SUSE Enterprise Linux (SLES) 12 Service Pack 2 或更高版本 - 64 位(x86_64?或?amd64)
Alpine Linux 3.7 或更高版本 - 64 位(x86_64?或?amd64)
有關(guān) .NET Core 2.1 和 .NET Core 2.2 支持的操作系統(tǒng)、發(fā)行版本和版本玻孟、不支持的 OS 版本和生命周期策略鏈接的完整列表唆缴,請(qǐng)參閱?.NET Core 2.1 支持的 OS 版本和?.NET Core 2.2 支持的 OS 版本。
macOS:
以下 macOS 版本支持 .NET Core 2.x:
macOS 10.12“Sierra”及更高版本
在指定了目標(biāo)的平臺(tái)后黍翎,下一步就是準(zhǔn)備發(fā)布了面徽。首先,打開命令行工具匣掸,然后利用cd命令進(jìn)入項(xiàng)目.csproj文件所在的路徑趟紊,然后利用dotnet build命令先將項(xiàng)目編譯一遍,編譯完成后會(huì)提示項(xiàng)目的錯(cuò)誤和警告碰酝,如果沒有霎匈,那么運(yùn)行dotnet publish命令進(jìn)行發(fā)布。
dotnet publish?- 將應(yīng)用程序及其依賴項(xiàng)打包到文件夾以部署到托管系統(tǒng)送爸。
用法:
dotnet publish [<PROJECT>] [-c|--configuration] [-f|--framework] [--force] [--manifest] [--no-build] [--no-dependencies]
? ? [--no-restore] [-o|--output] [-r|--runtime] [--self-contained] [-v|--verbosity] [--version-suffix]
dotnet publish [-h|--help]
dotnet publish?編譯應(yīng)用程序铛嘱、讀取 project 文件中指定的所有依賴項(xiàng)并將生成的文件集發(fā)布到目錄暖释。?輸出包括以下資產(chǎn):
擴(kuò)展名為 dll 的程序集中的中間語言 (IL) 代碼。
包含項(xiàng)目所有依賴項(xiàng)的 .deps.json 文件弄痹。
.runtime.config.json 文件饭入,其中指定了應(yīng)用程序所需的共享運(yùn)行時(shí),以及運(yùn)行時(shí)的其他配置選項(xiàng)(例如肛真,垃圾回收類型)谐丢。
應(yīng)用程序的依賴項(xiàng),將這些依賴項(xiàng)從 NuGet 緩存復(fù)制到輸出文件夾蚓让。
dotnet publish?命令的輸出可供部署至托管系統(tǒng)(例如服務(wù)器乾忱、電腦、Mac历极、筆記本電腦)以便執(zhí)行窄瘟。?若要準(zhǔn)備用于部署的應(yīng)用程序,這是唯一正式受支持的方法趟卸。?根據(jù)項(xiàng)目指定的部署的類型蹄葱,托管系統(tǒng)不一定已在其上安裝 .NET Core 共享運(yùn)行時(shí)(請(qǐng)注意這句話,太牛逼的感覺)锄列。?有關(guān)詳細(xì)信息图云,請(qǐng)參閱?.NET Core 應(yīng)用程序部署。
備注:
從 .NET Core 2.0 開始邻邮,無需運(yùn)行?dotnet restore竣况,因?yàn)樗尚栌羞€原的所有命令隱式運(yùn)行,如?dotnet build?和?dotnet run筒严。?
以長(zhǎng)格式傳遞命令時(shí)丹泉,該命令也支持?dotnet restore?選項(xiàng)(例如,--source)鸭蛙。?不支持縮寫選項(xiàng)摹恨,例如?-s。
執(zhí)行完成后娶视,會(huì)在項(xiàng)目的debug/release目錄中的.netcoreapp2.1文件夾中多出以你指定編譯平臺(tái)為名稱的文件夾晒哄,里面有一個(gè)publish文件夾,這個(gè)就是拷貝到目標(biāo)平臺(tái)執(zhí)行程序的文件夾歇万。下一步,就是拷貝到目標(biāo)平臺(tái)運(yùn)行啦勋陪。