Visual Studio でのパッケージ サポート フレームワークの適用Apply Package Support Framework in Visual Studio

Package Support Framework (PSF) は、既存のデスクトップアプリケーションに修正プログラムを適用できるオープンソースプロジェクトです。The Package Support Framework (PSF) is an open source project that enables you to apply fixes to your existing desktop application. PSF を使用すると、アプリケーションはコードを変更することなく、MSIX パッケージ形式で実行できます。The PSF enables an application to run in an MSIX packaged format without modifying code. パッケージ サポート フレームワークは、アプリケーションで最新のランタイム環境のベスト プラクティスに従うのに役立ちます。The Package Support Framework helps your application follow the best practices of the modern runtime environment.

以下のセクションでは、新しい Visual Studio プロジェクトを作成する方法、ソリューションにパッケージサポートフレームワークを含める方法、およびランタイム修正プログラムを作成する方法について説明します。In the following sections, we will explore how to create a new Visual Studio project, include Package Support Framework to the solution, and create runtime fixes.

手順 1: Visual Studio でパッケージソリューションを作成するStep 1: Create a package solution in Visual Studio

Visual Studio で、新しいVisual Studio ソリューション、空のソリューションを作成します。In Visual Studio, create a new Visual Studio Solutions, Blank Solution. 新しく作成された空のソリューションにアプリケーションプロジェクトを含めます。Include any application projects to the newly created Blank Solution.

手順 2: パッケージプロジェクトを追加するStep 2: Add a packaging project

Windows アプリケーションパッケージプロジェクトをまだ作成していない場合は、プロジェクトを作成し、ソリューションに追加します。If you don't already have a Windows Application Packaging Project, create one and add it to your solution. 新しいVisual C#-> Windows ユニバーサル-> Windows アプリケーションパッケージプロジェクトを作成し、新しく作成したソリューションに追加します。Create a new Visual C# -> Windows Universal -> Windows Application Packaging Project and add it to your newly created solution.

Windows アプリケーションパッケージプロジェクトの詳細については、「 Visual Studio を使用したアプリケーションのパッケージ化」を参照してください。For more information on Windows Application Packaging project, see Package your application by using Visual Studio.

ソリューションエクスプローラーで、パッケージプロジェクトを右クリックし、[編集] を選択して、プロジェクトファイルの一番下にこれを追加します。In Solution Explorer, right-click the packaging project, select Edit, and then add this to the bottom of the project file:

<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>

手順 3: ランタイム修正プログラムのプロジェクトを追加するStep 3: Add project for the runtime fix

新しいVisual C++-> Windows デスクトップ-> ダイナミックリンクライブラリ (DLL) プロジェクトをソリューションに追加します。Add a new Visual C++ -> Windows Desktop -> Dynamic-Link Library (DLL) project to the solution.

次に、そのプロジェクトを右クリックし、[プロパティ] を選択します。Next, right-click the that project, and then choose Properties.

[プロパティ] ページで、[構成プロパティ-> C/c + +-> 言語-> C++ Language Standard ] フィールドに移動します。In the property page, locate the Configuration Properties -> C/C++ -> Language -> C++ Language Standard field. 次に、ドロップダウンメニューから [ISO C++ 17 標準] (/std: c++ 17) を選択します。Then select ISO C++17 Standard (/std:c++17) from the drop-down menu.

プロジェクトを右クリックし、コンテキストメニューで [ Nuget パッケージの管理] オプションを選択します。Right-click on the project, and then in the context menu, choose the Manage Nuget Packages option. Package sourceオプションがAllまたはnuget.orgに設定されていることを確認します。Ensure that the Package source option is set to All or nuget.org.

そのフィールドの横にある設定アイコンをクリックします。Click the settings icon next that field.

PSFの Nuget パッケージを検索し、このプロジェクト用のMicrosoft パッケージをインストールします。Search the Nuget packages for PSF, then install the Microsoft.PackageSupportFramework for this project.

nuget パッケージ

手順 4: PSF ランチャー実行可能ファイルを起動するプロジェクトを追加するStep 4: Add a project that starts the PSF Launcher executable

新しいVisual C++-> 全般 > 空のプロジェクトをソリューションに追加します。Add a new Visual C++ -> General -> Empty Project to the solution.

手順は次のとおりです。Do the following steps:

  1. そのプロジェクトを右クリックし、コンテキストメニューで [ Nuget パッケージの管理] オプションを選択します。Right-click that project, and then in the context menu, choose the Manage Nuget Packages option. Package sourceオプションがAllまたはnuget.orgに設定されていることを確認します。Ensure that the Package source option is set to All or nuget.org.
  2. そのフィールドの横にある設定アイコンをクリックします。Click the settings icon next that field.
  3. PSF の Nuget パッケージを検索し、このプロジェクト用の Microsoft パッケージをインストールします。Search the Nuget packages for PSF, then install the Microsoft.PackageSupportFramework for this project.

プロジェクトのプロパティページを開き、 [全般設定] ページで、 Target Name PSFLauncher32 PSFLauncher64 アプリケーションのアーキテクチャに応じて [ターゲット名] プロパティを [or] に設定します。Open the properties pages for the project, and in the General settings page, set the Target Name property to PSFLauncher32 or PSFLauncher64 depending on the architecture of your application.

ソリューションのランタイム修正プロジェクトにプロジェクト参照を追加します。Add a project reference to the runtime fix project in your solution.

参照を右クリックし、[プロパティ] ウィンドウでこれらの値を適用します。Right-click the reference, and then in the Properties window, apply these values.

プロパティProperty Value
ローカルコピーCopy local TrueTrue
ローカル サテライト アセンブリにコピーCopy Local Satellite Assemblies TrueTrue
参照アセンブリの出力Reference Assembly Output TrueTrue
ライブラリ依存関係のリンクLink Library Dependencies FalseFalse
リンクライブラリの依存関係の入力Link Library Dependency Inputs FalseFalse

手順 5: パッケージプロジェクトを構成するStep 5: Configure the packaging project

パッケージプロジェクトを構成するには、次の手順を実行します。To configure the packaging project do the following steps:

  1. パッケージプロジェクトで、[アプリケーション] フォルダーを右クリックし、ドロップダウンメニューから [参照の追加] を選択します。In the packaging project, right-click the Applications folder, and then choose Add Reference from the dropdown menu.
  2. PSF ランチャープロジェクトとデスクトップアプリケーションプロジェクトを選択し、[ OK ] をクリックします。Choose the PSF Launcher project and your desktop application project, and then choose the OK button.
  3. PSF ランチャーデスクトップアプリケーションプロジェクトの両方を選択し、[Ok] ボタンをクリックします。Select both the PSF Launcher and the Desktop Application project, then click the Ok button. アプリケーションのソースコードが利用できない場合は、PSF ランチャープロジェクトのみを選択します。If the application source code is not available, select only the PSF Launcher project.
  4. [アプリケーション] ノードで、PSF ランチャーアプリケーションを右クリックし、[エントリポイントとして設定] を選択します。In the Applications node, right-click the PSF Launcher application, and then choose Set as Entry Point.

という名前のファイルを config.json パッケージプロジェクトに追加し、次の json テキストをコピーしてファイルに貼り付けます。Add a file named config.json to your packaging project, then, copy and paste the following json text into the file. "パッケージアクション" プロパティを "コンテンツ" に設定します。Set the Package Action property to Content.

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

各キーの値を指定します。Provide a value for each key. 次の表を参考にしてください。Use this table as a guide.

配列Array キーkey Value
applicationsapplications IDid Idパッケージマニフェスト内の要素の属性の値を使用し Application ます。Use the value of the Id attribute of the Application element in the package manifest.
applicationsapplications executableexecutable 開始する実行可能ファイルへのパッケージ相対パス。The package-relative path to the executable that you want to start. ほとんどの場合、パッケージマニフェストファイルを変更する前に、この値を取得できます。In most cases, you can get this value from your package manifest file before you modify it. これは、 Executable 要素の属性の値 Application です。It's the value of the Executable attribute of the Application element.
applicationsapplications workingDirectoryworkingDirectory Optionalを開始するアプリケーションの作業ディレクトリとして使用するパッケージ相対パス。(Optional) A package-relative path to use as the working directory of the application that starts. この値を設定しない場合、オペレーティングシステムは System32 ディレクトリをアプリケーションの作業ディレクトリとして使用します。If you don't set this value, the operating system uses the System32 directory as the application's working directory.
プロセスprocesses executableexecutable ほとんどの場合、この名前は、パスとファイル拡張子が削除された上で構成されたの名前になり executable ます。In most cases, this will be the name of the executable configured above with the path and file extension removed.
アップfixups dlldll パッケージ-読み込む修正 DLL への相対パス。Package-relative path to the fixup DLL to load.
アップfixups configconfig Optional修正 DLL の動作を制御します。(Optional) Controls how the fixup DLL behaves. この値の正確な形式は、各フィックスアップが必要に応じてこの "blob" を解釈できるため、fixup ごとに変化します。The exact format of this value varies on a fixup-by-fixup basis as each fixup can interpret this "blob" as it wants.

完了すると、 config.json ファイルは次のようになります。When you're done, your config.json file will look something like this.

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

注意

applicationsprocesses 、およびの各 fixups キーは配列です。The applications, processes, and fixups keys are arrays. つまり、config.xml ファイルを使用して、複数のアプリケーション、プロセス、および修正 DLL を指定できます。That means that you can use the config.json file to specify more than one application, process, and fixup DLL.

ランタイム修正プログラムのデバッグDebug a runtime fix

Visual Studio で、F5 キーを押してデバッガーを起動します。In Visual Studio, press F5 to start the debugger. 最初に開始されるのは、PSF ランチャーアプリケーションです。これにより、ターゲットのデスクトップアプリケーションが開始されます。The first thing that starts is the PSF Launcher application, which in turn, starts your target desktop application. ターゲットデスクトップアプリケーションをデバッグするには、[デバッグ]->[プロセスにアタッチ] を選択し、アプリケーションプロセスを選択して、デスクトップアプリケーションプロセスに手動でアタッチする必要があります。To debug the target desktop application, you'll have to manually attach to the desktop application process by choosing Debug->Attach to Process, and then selecting the application process. ネイティブランタイム修正 DLL を使用した .NET アプリケーションのデバッグを許可するには、[マネージコードとネイティブコードの種類 (混合モードのデバッグ)] を選択します。To permit the debugging of a .NET application with a native runtime fix DLL, select managed and native code types (mixed mode debugging).

デスクトップアプリケーションコードとランタイム修正プロジェクトでは、コード行の横にブレークポイントを設定できます。You can set break points next to lines of code in the desktop application code and the runtime fix project. アプリケーションにソースコードがない場合は、ランタイム修正プロジェクトのコード行の横にのみブレークポイントを設定できます。If you don't have the source code to your application, you'll be able to set break points only next to lines of code in your runtime fix project.