.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" など) を入力します。 [OK] ボタンを選択します。
アプリケーションのソース コードを追加します。
エディターで 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 は、アプリケーションを構成するファイルをローカル ファイル システムに書き込みます。
[ 発行 ] タブに、1 つのプロファイル FolderProfile が表示されるようになりました。 プロファイルの構成設定は、タブの [概要 ] セクションに表示されます。
結果のファイルは、Windowsシステムでは
Publish
という名前のディレクトリに、Unixシステムではpublish
という名前のディレクトリに配置され、どちらもプロジェクトの.\bin\release\netcoreapp2.1サブディレクトリのサブディレクトリに存在します。
発行プロセスは、アプリケーションのファイルと共に、アプリに関するデバッグ情報を含むプログラム データベース (.pdb) ファイルを出力します。 このファイルは、主に例外のデバッグに役立ちます。 アプリケーションのファイルと共にパッケージ化しないことを選択できます。 ただし、アプリのリリース ビルドをデバッグする場合に保存する必要があります。
任意の方法でアプリケーション ファイルの完全なセットをデプロイします。 たとえば、Zip ファイルにパッケージ化したり、簡単な copy
コマンドを使用したり、任意のインストール パッケージで展開したりできます。 インストール後、ユーザーは dotnet
コマンドを使用し、アプリケーションファイル名 ( dotnet fdd.dll
など) を指定して、アプリケーションを実行できます。
インストーラーでは、アプリケーション バイナリに加えて、共有フレームワーク インストーラーをバンドルするか、アプリケーションのインストールの一部として前提条件として確認する必要があります。 共有フレームワークをインストールするには、コンピューター全体であるため、管理者/ルート アクセスが必要です。
サードパーティの依存関係を使用したフレームワーク依存の展開
1 つ以上のサード パーティの依存関係を持つフレームワーク依存の配置をデプロイするには、プロジェクトで依存関係を使用できる必要があります。 アプリをビルドする前に、次の追加の手順が必要です。
NuGet パッケージ マネージャーを使用して、NuGet パッケージへの参照をプロジェクトに追加します。パッケージがシステムでまだ使用できない場合は、インストールします。 パッケージ マネージャーを開くには、 ツール>NuGet パッケージ マネージャー>ソリューション用の NuGet パッケージの管理を選択します。
サードパーティの依存関係 (
Newtonsoft.Json
など) がシステムにインストールされていることを確認し、インストールしていない場合はインストールします。 [ インストール済み ] タブには、システムにインストールされている NuGet パッケージが一覧表示されます。Newtonsoft.Json
が一覧にない場合は、[参照] タブを選択し、検索ボックスに「Newtonsoft.Json」と入力します。Newtonsoft.Json
選択し、右側のウィンドウでプロジェクトを選択してから、[インストール] を選択します。Newtonsoft.Json
が既にシステムにインストールされている場合は、[ソリューションのパッケージの管理] タブの右側のウィンドウでプロジェクトを選択してプロジェクトに追加します。
サードパーティの依存関係を持つフレームワーク依存のデプロイは、サードパーティの依存関係と同じくらい移植可能です。 たとえば、サードパーティ製ライブラリが macOS のみをサポートしている場合、アプリは Windows システムに移植できません。 これは、サードパーティの依存関係自体がネイティブ コードに依存している場合に発生します。 この良い例として、libuv にネイティブ依存関係が必要な Kestrel サーバーがあります。 この種のサード パーティの依存関係を持つアプリケーションに対して FDD が作成されると、発行された出力には、ネイティブ依存関係がサポートする (および NuGet パッケージに存在する ) ランタイム識別子 (RID) ごとにフォルダーが含まれます。
サード パーティの依存関係のない自己完結型デプロイ
サードパーティの依存関係のない自己完結型の展開をデプロイするには、プロジェクトの作成、 csproj ファイルの 変更、アプリのビルド、テスト、発行が含まれます。 C# で記述された簡単な例は、プロセスを示しています。 まず、フレームワークに依存する配置と同様に、プロジェクトを作成、コーディング、テストします。
プロジェクトを作成します。
ファイル>新規作成>プロジェクトを選択します。 [ 新しいプロジェクト ] ダイアログで、[ インストールされている プロジェクトの種類] ウィンドウで言語 (C# または Visual Basic) のプロジェクト カテゴリを展開し、[ .NET Core] を選択し、中央のウィンドウで コンソール アプリ (.NET Core) テンプレートを選択します。 [名前 ] テキスト ボックス にプロジェクト名 ("SCD" など) を入力し、[ OK ] ボタンを選択します。
アプリケーションのソース コードを追加します。
エディターで 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 は、アプリケーションを構成するファイルをローカル ファイル システムに書き込みます。
[ 発行 ] タブに、1 つのプロファイル FolderProfile が表示されるようになりました。 プロファイルの構成設定がタブの [概要 ] セクションに表示されます。 ターゲット ランタイム は発行されたランタイムを識別し、 ターゲットの場所 は自己完結型展開のファイルが書き込まれた場所を識別します。
Visual Studio では、既定では、発行されたすべてのファイルが 1 つのディレクトリに書き込まれます。 便宜上、ターゲット ランタイムごとに個別のプロファイルを作成し、発行されたファイルをプラットフォーム固有のディレクトリに配置することをお勧めします。 これには、ターゲット プラットフォームごとに個別の発行プロファイルを作成する必要があります。 そのため、次の手順を実行して、プラットフォームごとにアプリケーションをリビルドします。
[発行] ダイアログで [新しいプロファイルの作成] を選択します。
[ 発行先の選択 ] ダイアログで、[フォルダーの場所の 選択 ] を bin\Release\PublishOutput\win-x64 に変更します。 [OK] を選択.
プロファイルの一覧で新しいプロファイル (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>
サードパーティの依存関係を含む自己完結型のデプロイ
1 つ以上のサード パーティの依存関係を持つ自己完結型のデプロイをデプロイするには、依存関係を追加する必要があります。 アプリをビルドする前に、次の追加の手順が必要です。
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>
アプリケーションをデプロイすると、アプリで使用されるサードパーティの依存関係もアプリケーション ファイルに含まれます。 アプリが実行されているシステムでは、サード パーティ製ライブラリは必要ありません。
サードパーティ ライブラリを使用した自己完結型のデプロイは、そのライブラリでサポートされているプラットフォームにのみデプロイできます。 これは、フレームワーク依存のデプロイでネイティブ依存関係を持つサードパーティの依存関係を持つことと似ています。ネイティブ依存関係は、以前にインストールされていない限り、ターゲット プラットフォームには存在しません。
こちらも参照ください
- .NET Core アプリケーションの展開 の
- .NET Core ランタイム識別子 (RID) カタログ
.NET