Visual Studio でのパッケージ サポート フレームワークの適用
パッケージ サポート フレームワーク (PSF)は、既存のデスクトップ アプリケーションに修正プログラムを適用できる オープン ソース プロジェクト です。 PSF を使用すると、コードを変更せずに、パッケージ形式でアプリケーションを実行できます。 パッケージ サポート フレームワークは、アプリケーションで最新のランタイム環境のベスト プラクティスに従うのに役立ちます。
次のセクションでは、新しい Visual Studio プロジェクトを作成し、パッケージ サポート フレームワークをソリューションに含め、ランタイム修正プログラムを作成する方法について説明します。
手順 1: Visual Studio でパッケージ ソリューションを作成する
Visual Studio で、新しい Visual Studio ソリューション、空のソリューション を作成します。 新しく作成した 空のソリューション にアプリケーション プロジェクトを含めます。
手順 2: パッケージ プロジェクトを追加する
Windows アプリケーション パッケージ プロジェクト をまだ持っていない場合は作成し、ソリューションに追加します。 新しい Visual C# > >Windows Universal > >Windows アプリケーション パッケージ プロジェクト を作成し、新しく作成したソリューションに追加します。
Windows アプリケーション パッケージ プロジェクトの詳細については、Visual Studio を使用したアプリケーションのパッケージ化に関する記事を参照してください。
ソリューション エクスプローラー で、[パッケージ プロジェクト] を右クリックし、[プロジェクト ファイルの編集] を選択し、プロジェクト ファイルの一番下に追加します。
...
<Target Name="PSFRemoveSourceProject" AfterTargets="ExpandProjectReferences" BeforeTargets="_ConvertItems">
<ItemGroup>
<FilteredNonWapProjProjectOutput Include="@(_FilteredNonWapProjProjectOutput)">
<SourceProject Condition="'%(_FilteredNonWapProjProjectOutput.SourceProject)'=='_Runtime fix project name_'" />
</FilteredNonWapProjProjectOutput>
<_FilteredNonWapProjProjectOutput Remove="@(_FilteredNonWapProjProjectOutput)" />
<_FilteredNonWapProjProjectOutput Include="@(FilteredNonWapProjProjectOutput)" />
</ItemGroup>
</Target>
</Project>
手順 3: ランタイム修正プログラムのプロジェクトを追加する
新しい Visual C++ >> Windows Desktop >> Dynamic-Link Library (DLL) プロジェクトをソリューションに追加します。
次に、そのプロジェクトを右クリックし、[プロパティ] を 選択します。
プロパティ ページで、[構成プロパティ] > >[C/C++] > >[言語] > >[C++ 言語標準] フィールドを選択します。 次に、ドロップダウン メニューから [ISO C++17 Standard (/std:c++17)] を選択します。
プロジェクトを右クリックし、コンテキスト メニューで [Nuget パッケージの管理] オプションを選択 します。 [パッケージ ソース] オプションが [すべて] または [nuget.org] に設定されていることを確認します。
そのフィールドの横にある設定アイコンをクリックします。
Nuget パッケージで PSF を検索し、このプロジェクトの Microsoft.PackageSupportFramework をインストールします。
手順 4: PSF 起動ツールの実行可能ファイルを開始するプロジェクトを追加する
新しい [Visual C++] > [>General] > [>Empty Project] をソリューションに追加します。
手順は次のとおりです。
- そのプロジェクトを右クリックして、コンテキスト メニューの中の [Nuget パッケージの管理] オプションを選択します。 [パッケージ ソース] オプションが [すべて] または [nuget.org] に設定されていることを確認します。
- そのフィールドの横にある設定アイコンをクリックします。
- Nuget パッケージで PSF を検索し、このプロジェクトの Microsoft.PackageSupportFramework をインストールします。
プロジェクトのプロパティ ページを開き、[全般] 設定ページで、 [ターゲット名] プロパティをアプリケーションのアーキテクチャに応 じて PSFLauncher32
または PSFLauncher64
に設定します。
ソリューションのランタイム修正プロジェクトへのプロジェクト参照を追加します。
参照を右クリックして、[プロパティ] ウィンドウで次の値を適用します。
プロパティ | 値 |
---|---|
ローカルにコピー | True |
ローカル サテライト アセンブリにコピー | True |
参照アセンブリの出力 | True |
ライブラリ依存関係のリンク | False |
ライブラリ依存関係のリンクの入力 | False |
手順 5: パッケージ プロジェクトを構成する
パッケージ プロジェクトを構成するには、次の手順を実行します。
- パッケージ プロジェクトで、[アプリケーション] フォルダーを 右クリック し、ドロップダウン メニューから [参照の追加] を選択します。
- PSF 起動ツール プロジェクトとデスクトップ アプリケーション プロジェクトを選択し、[OK] ボタンを選択します。
- PSF 起動ツール と デスクトップ アプリケーション プロジェクトの両方を選択し、[OK] ボタンをクリックします。 アプリケーションのソース コードが使用できない場合は、PSF 起動ツール プロジェクトのみ選択します。
- [アプリケーション] ノードで、PSF 起動ツール アプリケーションを右クリックして、[エントリ ポイントに設定] を選択します。
config.json
という名前のファイルをパッケージ プロジェクトに追加し、次の json テキストをコピーしてファイルに貼り付けます。 [パッケージ アクション] プロパティを [ コンテンツ] に 設定します。
{
"applications": [
{
"id": "",
"executable": "",
"workingDirectory": ""
}
],
"processes": [
{
"executable": "",
"fixups": [
{
"dll": "",
"config": {
}
}
]
}
]
}
各キーの値を指定します。 次の表を参考にしてください。
Array | key | Value |
---|---|---|
applications | id | パッケージ マニフェストの Application 要素の Id 属性の値を使用します。 |
applications | executable | 起動する実行可能ファイルへのパッケージ相対パス。 ほとんどの場合、変更する前にパッケージ マニフェスト ファイルからこの値を取得できます。 これは、Application 要素の Executable 属性の値です。 |
applications | workingDirectory | (省略可能) 開始するアプリケーションの作業ディレクトリとして使用するパッケージ相対パス。 この値を設定しない場合、オペレーティング システムはアプリケーションの作業ディレクトリとして System32 ディレクトリを使用します。 |
プロセス | executable | ほとんどの場合、パスとファイル拡張子が削除された上で構成された executable の名前になります。 |
fixups | dll | 読み込む修正プログラムの DLL へのパッケージ相対パス。 |
fixups | config | (省略可能) 修正プログラムの DLL の動作を制御します。 この値の正確な形式は、各修正プログラムが必要に応じてこの "blob" を解釈できるため、修正プログラムごとに変化します。 |
完了すると、config.json
ファイルは次のように表示されます。
{
"applications": [
{
"id": "DesktopApplication",
"executable": "DesktopApplication/WinFormsDesktopApplication.exe",
"workingDirectory": "WinFormsDesktopApplication"
}
],
"processes": [
{
"executable": ".*App.*",
"fixups": [ { "dll": "RuntimeFix.dll" } ]
}
]
}
Note
applications
、processes
、および fixups
キーは配列です。 つまり、config.json ファイルを使用して、複数のアプリケーション、プロセス、および修正プログラムの DLL を指定できます。
ランタイム修正プログラムをデバッグする
Visual Studio で、F5 キーを押してデバッガーを起動します。 最初に PSF 起動ツール アプリケーションが起動し、次にターゲット デスクトップ アプリケーションが起動します。 ターゲット デスクトップ アプリケーションをデバッグするには、[デバッグ] > [>プロセスにアタッチ] を選択 し、アプリケーション プロセスを選択して、デスクトップ アプリケーション プロセスに手動でアタッチする必要があります。 ネイティブ ランタイム修正 DLL を使用した .NET アプリケーションのデバッグを許可するには、マネージド コードの種類とネイティブ コードの種類 (混合モードのデバッグ) を選択します。
デスクトップ アプリケーション コードとランタイム修正プロジェクトのコード行の横にブレーク ポイントを設定できます。 アプリケーションへのソース コードがない場合は、ランタイム修正プロジェクトのコード行の横にのみブレーク ポイントを設定できます。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示