您可以將 .NET Core 應用程式部署為 架構相依部署,其中包含您的應用程式二進位檔,但取決於目標系統上的 .NET Core 是否存在,或部署為 獨立的部署,其中包含您的應用程式和 .NET Core 二進位檔。 如需 .NET Core 應用程式部署的概觀,請參閱 .NET Core 應用程式部署。
下列各節說明如何使用 Microsoft Visual Studio 來建立下列類型的部署:
- 架構相依部署
- 具有第三方相依性的架構相依部署
- 獨立式部署
- 具有第三方相依性的獨立部署
如需使用 Visual Studio 開發 .NET Core 應用程式的詳細資訊,請參閱 .NET Core 相依性和需求。
架構相依部署
部署沒有第三方相依性的架構相依部署,只需要建置、測試及發佈應用程式即可。 以 C# 撰寫的簡單範例說明此程式。
建立專案。
選取 [檔案]> [新增]> [專案]。 在 [ 新增專案 ] 對話框中,展開 [ 已安裝 的專案類型] 窗格中的語言 (C# 或 Visual Basic) 專案類別,選擇 [.NET Core],然後在中央窗格中選取 [控制台應用程式][.NET Core] 範本。 在 [ 名稱 ] 文字框中輸入專案名稱,例如 “FDD”。 選取確定按鈕。
新增應用程式的原始程式碼。
在編輯器中開啟 Program.cs 或 Program.vb 檔案,並以下列程式代碼取代自動產生的程序代碼。 它會提示使用者輸入文字,並顯示使用者輸入的個別文字。 它會使用正則表示式
\w+
來分隔輸入文字中的文字。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 ?? "You didn't enter anything."); 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}"); } } } } }
Imports System.Text.RegularExpressions Namespace Applications.ConsoleApps Public Module ConsoleParser Public Sub Main() Console.WriteLine("Enter any text, followed by <Enter>:") Console.WriteLine() Dim s = Console.ReadLine() ShowWords(s) Console.Write($"{vbCrLf}Press any key to continue... ") Console.ReadKey() End Sub Private Sub ShowWords(s As String) Dim pattern = "\w+" Dim matches = Regex.Matches(s, pattern) Console.WriteLine() If matches.Count = 0 Then Console.WriteLine("No words were identified in your input.") Else Console.WriteLine($"There are {matches.Count} words in your string:") For ctr = 0 To matches.Count - 1 Console.WriteLine($" #{ctr,2}: '{matches(ctr).Value}' at position {matches(ctr).Index}") Next End If Console.WriteLine() End Sub End Module End Namespace
建立應用程式的除錯版本。
選取 [建置>解決方案]。 您也可以選取偵錯>開始偵錯來編譯並執行應用程式的偵錯版本。
部署應用程式。
偵錯並測試程序之後,請建立要與應用程式一起部署的檔案。 若要從 Visual Studio 發佈,請執行下列動作:
將解決方案組態從 [偵錯] 變更為工具列上的 [發行],以建立您應用程式的發行版本(而非偵錯版本)。
以滑鼠右鍵點擊 解決方案總管 中的專案(而非解決方案),然後選取 [ 發佈]。
在 [ 發佈] 索引標籤中,選取 [ 發佈]。 Visual Studio 會將組成應用程式的檔案寫入本機文件系統。
發佈 標籤頁現在僅顯示一個配置檔FolderProfile。 配置檔的組態設定會顯示在索引標籤的 [ 摘要 ] 區段中。
產生的檔案會放在 Windows 和 Unix 系統上名為
Publish
的目錄中,該目錄位於您專案的publish
子目錄。
發佈程式會連同應用程式的檔案一起發出程式資料庫 (.pdb) 檔案,其中包含應用程式偵錯資訊。 檔案主要用於偵錯例外狀況。 您可以選擇不要將它封裝在應用程式的檔案中。 不過,您應該在您要偵錯應用程式發行版本的情況下儲存它。
可以隨意部署完整的應用程式檔案。 例如,您可以將它們封裝在 Zip 檔案中、使用簡單的 copy
命令,或使用您選擇的任何安裝套件加以部署。 安裝之後,使用者就可以使用 dotnet
命令執行您的應用程式,並提供應用程式檔名,例如 dotnet fdd.dll
。
除了應用程式二進位檔之外,您的安裝程式也應該將共用架構安裝程序組合在一起,或檢查它是否為應用程式安裝的必要條件。 安裝共享架構需要系統管理員/根存取權,因為它是全機器。
具有第三方相依性的架構相依部署
在進行架構相依部署時,如果依賴一個或多個第三方相依項目,您的專案必須確保這些相依項目是可用的。 您必須先執行下列其他步驟,才能建置應用程式:
使用 NuGet 套件管理員 ,將 NuGet 套件的參考新增至您的專案;如果系統上尚未提供套件,請加以安裝。 若要開啟套件管理員,請選取 [工具>][NuGet 套件管理員>管理方案的 NuGet 套件]。
確認您的第三方相依性 (例如,
Newtonsoft.Json
) 已安裝在您的系統上,如果不是,請加以安裝。 [ 已安裝] 索引標籤會列出安裝在系統上的 NuGet 套件。 如果Newtonsoft.Json
未列出那裡,請選取流覽索引標籤,然後在搜尋方塊中輸入 "Newtonsoft.Json"。 選取Newtonsoft.Json
,然後在右側窗格中選擇您的專案,接著選取 安裝。如果
Newtonsoft.Json
已安裝在您的系統上,請在 [ 管理方案套件 ] 索引卷標的右窗格中選取專案,將其新增至您的專案。
具有第三方相依性的架構相依部署,其可攜性僅由第三方相依性決定。 例如,如果第三方連結庫只支援macOS,則應用程式無法移植到Windows系統。 如果第三方相依性本身相依於原生程序代碼,就會發生這種情況。 其中一個很好的範例是 Kestrel 伺服器,這需要 libuv 的原生相依性。 當為具有這類第三方依賴項的應用程式建立 FDD 時,所發佈的輸出會包含一個資料夾,該資料夾用於原生依賴項支援的每個運行時標識符 (RID),並且它存在於相關的 NuGet 套件中。
沒有第三方相依性的獨立部署
部署沒有第三方相依性的獨立部署,牽涉到建立專案、修改 csproj 檔案、建置、測試及發佈應用程式。 以 C# 撰寫的簡單範例說明此程式。 您一開始會建立、撰寫程式代碼及測試專案,就像是架構相依的部署一樣:
建立專案。
選取 [檔案]> [新增]> [專案]。 在 [ 新增專案 ] 對話框中,展開 [ 已安裝 的專案類型] 窗格中的語言 (C# 或 Visual Basic) 專案類別,選擇 [.NET Core],然後在中央窗格中選取 [控制台應用程式][.NET Core] 範本。 在 [ 名稱 ] 文字框中輸入專案名稱,例如 “SCD”,然後選取 [ 確定] 按鈕。
新增應用程式的原始程式碼。
在編輯器中開啟 Program.cs 或 Program.vb 檔案,並以下列程式代碼取代自動產生的程序代碼。 它會提示使用者輸入文字,並顯示使用者輸入的個別文字。 它會使用正則表示式
\w+
來分隔輸入文字中的文字。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 ?? "You didn't enter anything."); 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}"); } } } } }
Imports System.Text.RegularExpressions Namespace Applications.ConsoleApps Public Module ConsoleParser Public Sub Main() Console.WriteLine("Enter any text, followed by <Enter>:") Console.WriteLine() Dim s = Console.ReadLine() ShowWords(s) Console.Write($"{vbCrLf}Press any key to continue... ") Console.ReadKey() End Sub Private Sub ShowWords(s As String) Dim pattern = "\w+" Dim matches = Regex.Matches(s, pattern) Console.WriteLine() If matches.Count = 0 Then Console.WriteLine("No words were identified in your input.") Else Console.WriteLine($"There are {matches.Count} words in your string:") For ctr = 0 To matches.Count - 1 Console.WriteLine($" #{ctr,2}: '{matches(ctr).Value}' at position {matches(ctr).Index}") Next End If Console.WriteLine() End Sub End Module End Namespace
判斷您是否要使用全球化不變模式。
特別是如果您的應用程式以 Linux 為目標,您可以利用 全球化不變模式來減少部署的總大小。 全球化不變文化模式適用於無法全域感知的應用程式,這些程式可以使用不變文化的格式慣例、大小寫慣例,以及字串比較和排序順序。
若要啟用非變異模式,請在 方案總管中以滑鼠右鍵按兩下您的專案(而非方案),然後選取 [編輯 SCD.csproj ] 或 [編輯 SCD.vbproj]。 然後將下列醒目提示行新增至檔案:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" /> </ItemGroup> </Project>
建立應用程式的偵錯組建。
選取 [建置>解決方案]。 您也可以選取偵錯>開始偵錯來編譯並執行應用程式的偵錯版本。 此偵錯步驟可讓您識別應用程式在主機平臺上執行時的問題。 您仍然必須在每個目標平台上進行測試。
如果您已啟用全球化非變異模式,請務必特別確定沒有區分文化特性的數據是否適合您的應用程式。
完成偵錯之後,您可以發佈獨立式部署:
在偵錯並測試程序之後,請針對其目標的每個平臺,建立要與您的應用程式一起部署的檔案。
若要從 Visual Studio 發佈您的應用程式,請執行下列動作:
定義您的應用程式目標平臺。
在方案總管中以滑鼠右鍵按一下您的專案(而非方案),然後選取編輯 SCD.csproj。
在
<RuntimeIdentifiers>
<PropertyGroup>
檔案的 區段中建立標記,以定義應用程式目標的平臺,並指定您目標每個平臺的運行時間標識碼 (RID)。 您還需要新增分號以分隔多個 RID。 如需運行時間識別碼的清單,請參閱 運行時間識別元目錄 。
例如,下列範例指出應用程式在64位 Windows作系統和64位OS X作系統上執行。
<PropertyGroup> <RuntimeIdentifiers>win-x64;osx-x64</RuntimeIdentifiers> </PropertyGroup>
您可以將
<RuntimeIdentifiers>
元素置於<PropertyGroup>
檔案中的任何中。 本節稍後會出現完整的 範例 csproj 檔案。發行您的應用程式。
在偵錯並測試程序之後,請針對其目標的每個平臺,建立要與您的應用程式一起部署的檔案。
若要從 Visual Studio 發佈您的應用程式,請執行下列動作:
將解決方案組態從 [偵錯] 變更為工具列上的 [發行],以建立您應用程式的發行版本(而非偵錯版本)。
以滑鼠右鍵點擊 解決方案總管 中的專案(而非解決方案),然後選取 [ 發佈]。
在 [ 發佈] 索引標籤中,選取 [ 發佈]。 Visual Studio 會將組成應用程式的檔案寫入本機文件系統。
發佈 標籤頁現在僅顯示一個配置檔FolderProfile。 配置檔的組態設定會顯示在索引標籤的 [ 摘要 ] 區段中。 目標運行時間 會識別已發佈的運行時間,而 [目標位置] 會識別寫入獨立式部署的檔案位置。
Visual Studio 預設會將所有已發佈的檔案寫入單一目錄。 為了方便起見,最好為每個目標運行時間建立個別配置檔,並將已發佈的檔案放在平臺特定目錄中。 這牽涉到為每個目標平臺建立個別的發行配置檔。 因此,現在請執行下列動作來重建每個平台的應用程式:
在 [發佈] 對話框中選取 [建立新配置檔]。
在 [ 挑選發佈目標 ] 對話框中,將 [選擇資料夾位置] 變更為 bin\Release\PublishOutput\win-x64。 請選擇 [確定]。
在設定檔案清單中選取新的設定檔 (FolderProfile1),並確定 [目標執行時間 ] 為
win-x64
。 如果不是,請選取 [ 設定]。 在 [ 配置檔設定] 對話框中,將 [目標運行時間 ] 變更為win-x64
,然後選取 [ 儲存]。 否則,請選取 [取消]。選取 [發佈 ] 以發佈適用於 64 位 Windows 10 平台的應用程式。
請再次遵循前面的步驟,為
osx-x64
平台建立個人資料。 目標位置為 bin\Release\PublishOutput\osx-x64,而目標運行時間為osx-x64
。 Visual Studio 指派給此配置檔的名稱為 FolderProfile2。
每個目標位置都包含啟動應用程式所需的一組完整檔案(您的應用程式檔案和所有 .NET Core 檔案)。
發佈程式會連同應用程式的檔案一起發出程式資料庫 (.pdb) 檔案,其中包含應用程式偵錯資訊。 檔案主要用於偵錯例外狀況。 您可以選擇不要將它封裝在應用程式的檔案中。 不過,您應該在您要偵錯應用程式發行版本的情況下儲存它。
以您喜歡的任何方式部署這些已發布的檔案。 例如,您可以將它們封裝在 Zip 檔案中、使用簡單的 copy
命令,或使用您選擇的任何安裝套件加以部署。
以下是此專案的完整 csproj 檔案。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeIdentifiers>win-x64;osx-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>netcoreapp2.1</TargetFramework>
<RuntimeIdentifiers>win-x64;osx-x64</RuntimeIdentifiers>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
</ItemGroup>
</Project>
當您部署應用程式時,應用程式中使用的任何第三方相依性也會包含在您的應用程式檔案中。 應用程式運行的系統上不需要第三方庫。
您只能將具有第三方連結庫的獨立部署部署到該連結庫所支持的平臺。 這類似於在依賴架構的部署中使用具有原生相依性的第三方套件。如果這些原生相依性沒有先安裝在目標平台上,它們就不會出現在目標平台上。