可將 .NET Core 應用程序部署為依賴框架的部署或獨立部署,前者包含應用程序二進制文件,但依賴目標系統上存在的 .NET Core,而后者同時包含應用程序和 .NET Core 二進制文件。 有關 .NET Core 應用程序部署的概述,請參閱 .NET Core 應用程序部署。
以下各節演示如何使用 Microsoft Visual Studio 創建下列各類部署:
- 依賴框架的部署
- 包含第三方依賴項的依賴框架的部署
- 獨立部署
- 包含第三方依賴項的獨立部署
有關使用 Visual Studio 開發 .NET Core 應用程序的信息,請參閱 Windows 上 .NET Core 的先決條件。
依賴框架的部署
如果不使用第三方依賴項,部屬依賴框架的部署只包括生成、測試和發布應用。 一個用 C# 編寫的簡單示例可說明此過程。
-
創建項目。
選擇“文件” > “新建” > “項目”。 在“新建項目”對話框中,在“已安裝”項目類型窗格中選擇“.NET Core”,然后在中心窗格中選擇“控制台應用(.NET Core)”模板。 在“名稱”文本框中輸入項目名稱,如“FDD”。 選擇“確定”按鈕。
-
添加應用程序的源代碼。
在編輯器中打開 Program.cs 文件,然后使用下列代碼替換自動生成的代碼。 它會提示用戶輸入文本,並顯示用戶輸入的個別詞。 它使用正則表達式
\w+
來將輸入文本中的詞分開。C#using System; using System.Text.RegularExpressions; namespace Applications.ConsoleApps { public class ConsoleParser { public static void Main() { Console.WriteLine("Enter any text, followed by <Enter>:\n"); String s = Console.ReadLine(); ShowWords(s); Console.Write("\nPress any key to continue... "); Console.ReadKey(); } private static void ShowWords(String s) { String pattern = @"\w+"; var matches = Regex.Matches(s, pattern); if (matches.Count == 0) { Console.WriteLine("\nNo words were identified in your input."); } else { Console.WriteLine($"\nThere are {matches.Count} words in your string:"); for (int ctr = 0; ctr < matches.Count; ctr++) { Console.WriteLine($" #{ctr,2}: '{matches[ctr].Value}' at position {matches[ctr].Index}"); } } } } }
-
創建應用的調試版本。
選擇“生成” > “生成解決方案”。 也可通過選擇“調試” > “開始調試”來編譯和運行應用程序的調試版本。
-
部署應用。
調試並測試程序后,創建要與應用一起部署的文件。 若要從 Visual Studio 發布,請執行以下操作:
-
將工具欄上的解決方案配置從“調試”更改為“發布”,生成應用的發布(而非調試)版本。
-
在“解決方案資源管理器”中右鍵單擊項目(而非解決方案),然后選擇“發布”。
-
在“發布”選項卡上,選擇“發布”。 Visual Studio 將包含應用程序的文件寫入本地文件系統。
-
“發布”選項卡現在顯示單個配置文件 FolderProfile。 該配置文件的配置設置顯示在選項卡的“摘要”部分。
生成的文件位於名為
PublishOutput
的目錄中,該目錄位於項目的 .\bin\release 子目錄的子目錄中。 -
與應用程序的文件一起,發布過程將發出包含應用調試信息的程序數據庫 (.pdb) 文件。 該文件主要用於調試異常。 可以選擇不使用應用程序文件打包該文件。 但是,如果要調試應用的發布版本,則應保存該文件。
可以采用任何喜歡的方式部署完整的應用程序文件集。 例如,可以使用簡單的 copy
命令將其打包為 Zip 文件,或者使用選擇的安裝包進行部署。 安裝成功后,用戶可通過使用 dotnet
命令或提供應用程序文件名(如 dotnet fdd.dll
)來執行應用程序。
除應用程序二進制文件外,安裝程序還應捆綁共享框架安裝程序,或在安裝應用程序的過程中將其作為先決條件進行檢查。 安裝共享框架需要管理員/根訪問權限,因為它屬於計算機范圍。
包含第三方依賴項的依賴框架的部署
要使用一個或多個第三方依賴項來部署依賴框架的部署,需要任何依賴項都可供項目使用。 在生成應用之前,還需執行以下額外步驟:
-
使用 NuGet 包管理器向項目添加對 NuGet 包的引用;如果系統上還沒有此包,請先安裝它。 要打開包管理器,請選擇“工具” > “NuGet 包管理器” > “管理解決方案的 NuGet 包”。
-
確認已在系統中安裝
Newtonsoft.Json
,如果尚未安裝,請先安裝它。 “已安裝”選項卡列出了系統中已安裝的 NuGet 包。 如果此處未列出Newtonsoft.Json
,請選擇“瀏覽”選項卡,然后在搜索框中輸入“Newtonsoft.Json”。 選擇Newtonsoft.Json
,在右側窗格中選擇項目,然后選擇“安裝”。 -
如果系統中已安裝
Newtonsoft.Json
,請在“管理解決方案包”選項卡的右側窗格中選擇項目,將該項添加到項目。
請注意,如果依賴框架的部署具有第三方依賴項,則其可移植性只與第三方依賴項相同。 例如,如果某個第三方庫只支持 macOS,該應用將無法移植到 Windows 系統。 當第三方依賴項本身取決於本機代碼時,也可能發生此情況。 Kestrel 服務器就是一個很好的示例,它需要 libuv 的本機依賴項。 當為具有此類第三方依賴項的應用程序創建 FDD 時,已發布的輸出會針對每個本機依賴項支持(存在於 NuGet 包中)的運行時標識符 (RID) 包含一個文件夾。
不包含第三方依賴項的獨立部署
部署沒有第三方依賴項的獨立部署包括創建項目、修改 csproj 文件、生成、測試以及發布應用。 一個用 C# 編寫的簡單示例可說明此過程。
-
創建項目。
選擇“文件” > “新建” > “項目”。 在“添加新項目”對話框中,在“已安裝”項目類型窗格中選擇“.NET Core”,然后在中心窗格中選擇“控制台應用(.NET Core)”模板。 在“名稱”文本框中輸入項目名稱如“SCD”,然后選擇“確定”按鈕。
-
添加應用程序的源代碼。
在編輯器中打開 Program.cs 文件,然后使用下列代碼替換自動生成的代碼。 它會提示用戶輸入文本,並顯示用戶輸入的個別詞。 它使用正則表達式
\w+
來將輸入文本中的詞分開。C#using System; using System.Text.RegularExpressions; namespace Applications.ConsoleApps { public class ConsoleParser { public static void Main() { Console.WriteLine("Enter any text, followed by <Enter>:\n"); String s = Console.ReadLine(); ShowWords(s); Console.Write("\nPress any key to continue... "); Console.ReadKey(); } private static void ShowWords(String s) { String pattern = @"\w+"; var matches = Regex.Matches(s, pattern); if (matches.Count == 0) { Console.WriteLine("\nNo words were identified in your input."); } else { Console.WriteLine($"\nThere are {matches.Count} words in your string:"); for (int ctr = 0; ctr < matches.Count; ctr++) { Console.WriteLine($" #{ctr,2}: '{matches[ctr].Value}' at position {matches[ctr].Index}"); } } } } }
-
定義應用的目標平台。
-
在“解決方案資源管理器”中右鍵單擊項目(而非解決方案),然后選擇“編輯 SCD.csproj”。
-
在 csproj 文件(該文件用於定義應用的目標平台)的
<PropertyGroup>
部分中創建<RuntimeIdentifiers>
標記,然后指定每個目標平台的運行時標識符 (RID)。 請注意,還需要添加分號來分隔 RID。 請查看運行時標識符目錄,獲取運行時標識符列表。
例如,以下示例表明應用在 64 位 Windows 10 操作系統和 64 位 OS X 10.11 版本的操作系統上運行。
-
<PropertyGroup> <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers> </PropertyGroup>
請注意,<RuntimeIdentifiers>
元素可能會進入 csproj 文件的任何 <PropertyGroup>
中。 本節后面部分將顯示完整的示例 csproj 文件。
-
創建應用的調試版本。
選擇“生成” > “生成解決方案”。 也可通過選擇“調試” > “開始調試”來編譯和運行應用程序的調試版本。
-
發布你的應用。
調試並測試程序后,為應用的每個目標平台創建要與應用一起部署的文件。
若要從 Visual Studio 發布應用,請執行以下操作:
-
將工具欄上的解決方案配置從“調試”更改為“發布”,生成應用的發布(而非調試)版本。
-
在“解決方案資源管理器”中右鍵單擊項目(而非解決方案),然后選擇“發布”。
-
在“發布”選項卡上,選擇“發布”。 Visual Studio 將包含應用程序的文件寫入本地文件系統。
-
“發布”選項卡現在顯示單個配置文件 FolderProfile。 該配置文件的配置設置顯示在選項卡的“摘要”部分。目標運行時用於標識已發布的運行時,目標位置用於標識獨立部署文件的寫入位置。
-
默認情況下,Visual Studio 將所有已發布文件寫入單個目錄。 為了方便起見,最好為每個目標運行時創建單個配置文件,並將已發布文件置於特定於平台的目錄中。 這包括為每個目標平台創建單獨的發布配置文件。 現在,請執行下列操作,為每個平台重新生成應用程序:
-
在“發布”對話框中選擇“創建新配置文件”。
-
在“選取發布目標”對話框中,將“選擇文件夾”位置更改為 bin\Release\PublishOutput\win10-x64。 選擇“確定”。
-
在配置文件列表中選擇新配置文件 (FolderProfile1) ,並確保“目標運行時”為
win10-x64
。 如果不是,請選擇“設置”。 在“配置文件設置”對話框中,將“目標運行時”更改為win10-x64
,然后選擇“保存”。 否則,選擇“取消”。 -
選擇“發布”,發布 64 位 Windows 10 平台的應用。
-
請再次按照上述步驟創建
osx.10.11-x64
平台的配置文件。 “目標位置”為 bin\Release\PublishOutput\osx.10.11-x64,“目標運行時”為osx.10.11-x64
。Visual Studio 分配給此配置文件的名稱是 FolderProfile2。
-
請注意,每個目標位置中都包含啟動應用所需的完整文件集(既包含應用文件,又包含所有 .NET Core 文件)。
-
與應用程序的文件一起,發布過程將發出包含應用調試信息的程序數據庫 (.pdb) 文件。 該文件主要用於調試異常。 可以選擇不使用應用程序文件打包該文件。 但是,如果要調試應用的發布版本,則應保存該文件。
可按照任何喜歡的方式部署已發布的文件。 例如,可以使用簡單的 copy
命令將其打包為 Zip 文件,或者使用選擇的安裝包進行部署。
下面是此項目完整的 csproj 文件。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp1.1</TargetFramework> <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers> </PropertyGroup> </Project>
包含第三方依賴項的獨立部署
部署包含一個或多個第三方依賴項的獨立部署包括添加依賴項。 在生成應用之前,還需執行以下額外步驟:
-
使用 NuGet 包管理器向項目添加對 NuGet 包的引用;如果系統上還沒有此包,請先安裝它。 要打開包管理器,請選擇“工具” > “NuGet 包管理器” > “管理解決方案的 NuGet 包”。
-
確認已在系統中安裝
Newtonsoft.Json
,如果尚未安裝,請先安裝它。 “已安裝”選項卡列出了系統中已安裝的 NuGet 包。 如果此處未列出Newtonsoft.Json
,請選擇“瀏覽”選項卡,然后在搜索框中輸入“Newtonsoft.Json”。 選擇Newtonsoft.Json
,在右側窗格中選擇項目,然后選擇“安裝”。 -
如果系統中已安裝
Newtonsoft.Json
,請在“管理解決方案包”選項卡的右側窗格中選擇項目,將其添加到項目。
下面是此項目的完整 csproj 文件:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp1.1</TargetFramework> <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers> </PropertyGroup> <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="10.0.2" /> </ItemGroup> </Project>
部署應用程序時,應用中使用的任何第三方依賴項也包含在應用程序文件中。 運行應用的系統上不需要第三方庫。
請注意,可以只將具有一個第三方庫的獨立部署部署到該庫支持的平台。 這與依賴框架的部署中具有本機依賴項和第三方依賴項相似,其中的本機依賴項不會存在於目標平台上,除非之前在該平台上安裝了該依賴項。
詳細鏈接:https://docs.microsoft.com/zh-cn/dotnet/core/deploying/deploy-with-vs