在 Visual Studio 中套用套件支援架構

封裝支援架構 (.PSF) 是 開放原始碼專案 ,可讓您將修正程式套用至現有的桌面應用程式。 .PSF 可讓應用程式以 MSIX 封裝格式執行,而不需要修改程式碼。 套件支援架構有助於讓應用程式遵循最新執行階段環境的最佳做法。

在下列各節中,我們將探討如何建立新的 Visual Studio 專案、將封裝支援架構包含到方案,以及建立執行時間修正。

步驟1:在 Visual Studio 中建立封裝方案

在 Visual Studio 中,建立新的Visual Studio 解決方案、空白的方案。 將任何應用程式專案包含在新建立的 空白方案中。

步驟2:新增封裝專案

如果您還沒有Windows 應用程式封裝專案,請建立一個,並將其新增至您的方案。 建立新的Visual c #- Windows 通用 > Windows 應用程式封裝專案,並將它新增至新建立的方案。

如需 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 桌面 > Dynamic-Link 程式庫 (DLL) 專案。

接下來,以滑鼠右鍵按一下該專案,然後選擇 [ 屬性]。

在 [屬性] 頁面中,找出設定 屬性- c/c + +- > language- > c + + 語言標準 欄位。 然後從下拉式功能表中選取 [ISO c + + 17 標準 (/std: c + + 17) 。

以滑鼠右鍵按一下專案,然後在內容功能表中,選擇 [ 管理 Nuget 封裝 ] 選項。 確定 [ 套件來源 ] 選項設定為 [ 全部 ] 或 [ nuget.org]。

按一下該欄位旁的設定圖示。

搜尋適用于 .psf的 Nuget 套件,然後安裝此專案的 PackageSupportFramework

nuget 套件

步驟4:新增啟動 .psf Launcher 可執行檔的專案

將新的Visual C++- 一般- > 空白 Project新增至方案。

請執行下列步驟:

  1. 以滑鼠右鍵按一下該專案,然後在內容功能表中,選擇 [ 管理 Nuget 封裝 ] 選項。 確定 [ 套件來源 ] 選項設定為 [ 全部 ] 或 [ nuget.org]。
  2. 按一下該欄位旁的設定圖示。
  3. 搜尋適用于 .PSF 的 Nuget 套件,然後安裝此專案的 PackageSupportFramework。

開啟專案的 屬性頁 ,然後在 [ 一般 設定] 頁面中,將 [ 目標名稱 ] 屬性設定為 或, 視您應用程式的架構而定。

將專案參考新增至方案中的執行時間修正專案。

以滑鼠右鍵按一下參考,然後在 [ 屬性 ] 視窗中,套用這些值。

屬性
複製到本機 True
複製附屬組件到本機 True
參考組件輸出 True
連結程式庫相依性 False
程式庫相依性輸入 False

步驟5:設定封裝專案

若要設定封裝專案,請執行下列步驟:

  1. 在封裝專案中,以滑鼠右鍵按一下 [ 應用程式 ] 資料夾,然後從下拉式功能表中選擇 [ 加入參考 ]。
  2. 選擇 [.psf Launcher 專案和您的桌面應用程式專案,然後選擇 [確定]按鈕。
  3. 選取.psf Launcher桌面應用程式專案,然後按一下 [確定] 按鈕。 如果無法使用應用程式原始程式碼,請只選取 .psf Launcher 專案。
  4. 在 [應用程式] 節點中,以滑鼠右鍵按一下 .psf Launcher 應用程式,然後選擇 [設定為進入點]。

將名為的檔案新增 config.json 至您的封裝專案,然後複製下列 json 文字並貼到檔案中。 將 [ 封裝動作 ] 屬性設定為 [ 內容]。

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

提供每個索引鍵的值。 請使用下表作為指南。

Array 索引鍵
應用程式所需 id IdApplication 封裝資訊清單中使用元素的屬性值。
應用程式所需 可執行檔 您要啟動之可執行檔的封裝相對路徑。 在大部分的情況下,您可以在修改之前從套件資訊清單檔中取得此值。 這是元素的屬性值 ExecutableApplication
應用程式所需 workingDirectory (選擇性) 封裝相對路徑,用來做為啟動應用程式的工作目錄。 如果您未設定此值,作業系統會使用該 System32 目錄作為應用程式的工作目錄。
處理程序 可執行檔 在大部分的情況下,這會是上述設定的名稱, executable 並移除路徑和副檔名。
修復 dll 要載入之修復 DLL 的封裝相對路徑。
修復 config (選擇性) 控制修復 DLL 的運作方式。 此值的確切格式會因修復修復而異,因為每個修復可以視需要解讀此「blob」。

當您完成時,您的檔案 config.json 看起來會像這樣。

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

注意

applicationsprocesses 和索引 fixups 鍵是陣列。 這表示您可以使用 config.xml 檔案指定一個以上的應用程式、進程和修復 DLL。

偵錯工具執行時間修正

在 Visual Studio 中,按 F5 啟動偵錯工具。 首先,第一件事是 .psf Launcher 應用程式,後者接著會啟動您的目標桌面應用程式。 若要對目標傳統型應用程式進行偵錯工具,您必須選擇 [ debug 附加至進程],然後選取應用程式進程,以手動方式附加至桌面應用程式進程。 若要允許使用原生執行時間修正 DLL 來進行 .NET 應用程式的偵錯工具,請選取 managed 和機器碼類型 (混合模式的偵錯工具) 。

您可以在桌面應用程式程式碼中的程式程式碼旁設定中斷點,並在執行時間修正專案中設定中斷點。 如果您沒有應用程式的原始程式碼,您只能將中斷點設定在執行時間修正專案的程式程式碼旁邊。