Visual Studio でのパッケージ サポート フレームワークの適用

パッケージ サポート フレームワーク (PSF)は、既存のデスクトップ アプリケーションに修正プログラムを適用できるオープン ソース プロジェクトです。 PSF を使用すると、アプリケーションを、コードを変更せずに MSIX パッケージ形式で実行できます。 パッケージ サポート フレームワークは、アプリケーションで最新のランタイム環境のベスト プラクティスに従うのに役立ちます。

次のセクションでは、新しい Visual Studio プロジェクトを作成し、パッケージ サポート フレームワークをソリューションに含め、ランタイム修正プログラムを作成する方法について説明します。

手順 1: パッケージ ソリューションを作成する Visual Studio

このVisual Studio、新しいソリューション (空Visual Studio ソリューション) を作成します。 新しく作成した空のソリューション にアプリケーション プロジェクト を含める

手順 2: パッケージ プロジェクトを追加する

アプリケーション パッケージのアプリケーション パッケージをまだWindows場合 Project作成し、ソリューションに追加します。 新しい Visual C# -> Windows Universal -> Windows Application Packaging Projectを作成し、新しく作成したソリューションに追加します。

アプリケーション パッケージ プロジェクトの詳細Windowsを使用したアプリケーションのパッケージ化に関するページVisual Studio。

ソリューション エクスプローラー パッケージ 化プロジェクトを右クリックし、[ファイルの編集] Project 選択し、プロジェクト ファイルの一番下に追加します。

...
  <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 をインストールします。

nuget パッケージ

手順 4: PSF ファイルを起動するプロジェクトを起動ツールする

新しい Visual C++ -> General -> Empty Project ソリューションに追加します。

手順は次のとおりです。

  1. そのプロジェクトを右クリックし、コンテキスト メニューの [Nuget パッケージの管理] オプションを選択 します。 [パッケージ ソース ] オプションが [ すべて] または [パッケージ]に設定 nuget.org。
  2. そのフィールドの横にある設定アイコンをクリックします。
  3. Nuget パッケージで PSF を検索し、このプロジェクトの Microsoft.PackageSupportFramework をインストールします。

プロジェクトの プロパティ ページ を開き、[ 全般設定 ] ページで、 [ターゲット名] プロパティを または アプリケーションのアーキテクチャに応 PSFLauncher32 じて または PSFLauncher64 に設定します。

ソリューションのランタイム修正プロジェクトへのプロジェクト参照を追加します。

参照を右クリックし、[プロパティ] ウィンドウで これらの値を適用します。

プロパティ
ローカルコピー
ローカル サテライト アセンブリにコピー
参照アセンブリの出力
ライブラリ依存関係のリンク ×
リンク ライブラリの依存関係の入力 ×

手順 5: パッケージ プロジェクトを構成する

パッケージ プロジェクトを構成するには、次の手順を実行します。

  1. パッケージ プロジェクトで、Applications フォルダーを 右クリック し、ドロップダウンメニューから [参照の追加] を選択します。
  2. PSF 起動ツールプロジェクトとデスクトップ アプリケーション プロジェクトを選択し 、[OK] ボタンを選択 します。
  3. PSF ファイルとデスクトップ 起動ツール の両方を 選択 し、[OK] ボタンをクリックします。 アプリケーションのソース コードが使用できない場合は、プロジェクトの PSF 起動ツールします。
  4. [アプリケーション ] ノードで、PSF アプリケーションを右クリック起動ツールして、[エントリ ポイントに設定]を選択します

という名前のファイルをパッケージ プロジェクトに追加し、次の json テキストをコピー config.json してファイルに貼り付けます。 [パッケージ アクション ] プロパティを [ コンテンツ] に 設定します

{
    "applications": [
        {
            "id": "",
            "executable": "",
            "workingDirectory": ""
        }
    ],
    "processes": [
        {
            "executable": "",
            "fixups": [
                {
                    "dll": "",
                    "config": {
                    }
                }
            ]
        }
    ]
}

各キーの値を指定します。 次の表を参考にしてください。

Array key
applications id パッケージ マニフェスト内の Id 要素の 属性 Application の値を使用します。
applications executable 開始する実行可能ファイルへのパッケージ相対パス。 ほとんどの場合、変更する前にパッケージ マニフェスト ファイルからこの値を取得できます。 これは、 要素の 属性 Executable の値 Application です。
applications workingDirectory (省略可能)開始するアプリケーションの作業ディレクトリとして使用するパッケージ相対パス。 この値を設定しない場合、オペレーティング システムはアプリケーションの作業 System32 ディレクトリとして ディレクトリを使用します。
プロセス executable ほとんどの場合、パスとファイル拡張子が削除された上で構成された の executable 名前になります。
修正プログラム dll 読み込む修正プログラム DLL へのパッケージ相対パス。
修正プログラム config (省略可能)修正 DLL の動作を制御します。 この値の正確な形式は、修正ごとに異なります。各修正プログラムは、この "BLOB" を必要なとおりに解釈できます。

完了すると、ファイル config.json は次のように表示されます。

{
  "applications": [
    {
      "id": "DesktopApplication",
      "executable": "DesktopApplication/WinFormsDesktopApplication.exe",
      "workingDirectory": "WinFormsDesktopApplication"
    }
  ],
  "processes": [
    {
      "executable": ".*App.*",
      "fixups": [ { "dll": "RuntimeFix.dll" } ]
    }
  ]
}

注意

applications、、 processes および キー fixups は配列です。 つまり、config.json ファイルを使用して、複数のアプリケーション、プロセス、および修正 DLL を指定できます。

ランタイム修正をデバッグする

このVisual Studio F5 キーを押してデバッガーを起動します。 最初に始めるのは、PSF 起動ツールアプリケーションです。次に、ターゲット デスクトップ アプリケーションが起動されます。 ターゲット デスクトップ アプリケーションをデバッグするには、[デバッグ] ->[プロセスにアタッチ] を選択 し、アプリケーション プロセスを選択して、デスクトップ アプリケーション プロセスに手動でアタッチする必要があります。 ネイティブ ランタイム修正 DLL を使用した .NET アプリケーションのデバッグを許可するには、マネージド コードの種類とネイティブ コードの種類 (混合モードのデバッグ) を選択します。

デスクトップ アプリケーション コードとランタイム修正プロジェクトのコード行の横にブレーク ポイントを設定できます。 アプリケーションのソース コードを使用しない場合は、ランタイム修正プロジェクトのコード行の横にのみブレーク ポイントを設定できます。