Anwenden des Frameworks zur Paketunterstützung in Visual StudioApply Package Support Framework in Visual Studio

Das Package Support Framework (PSF) ist ein Open-Source-Projekt , mit dem Sie Korrekturen auf Ihre vorhandene Desktop Anwendung anwenden können.The Package Support Framework (PSF) is an open source project that enables you to apply fixes to your existing desktop application. Mit dem PSF kann eine Anwendung in einem msix-Paketformat ausgeführt werden, ohne Code zu ändern.The PSF enables an application to run in an MSIX packaged format without modifying code. Durch das Package Support Framework können in Ihrer Anwendung die bewährten Methoden moderner Laufzeitumgebungen angewandt werden.The Package Support Framework helps your application follow the best practices of the modern runtime environment.

In den folgenden Abschnitten erfahren Sie, wie Sie ein neues Visual Studio-Projekt erstellen, das Paket Unterstützungs Framework für die Projekt Mappe einschließen und Lauf Zeit Korrekturen erstellen.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.

Schritt 1: Erstellen einer Paket Projekt Mappe in Visual StudioStep 1: Create a package solution in Visual Studio

Erstellen Sie in Visual Studio eine neue Visual Studio-Projekt Mappe, leere Projekt Mappe.In Visual Studio, create a new Visual Studio Solutions, Blank Solution. Fügen Sie beliebige Anwendungsprojekte in die neu erstellte leereProjekt Mappe ein.Include any application projects to the newly created Blank Solution.

Schritt 2: Hinzufügen eines Paket ProjektsStep 2: Add a packaging project

Wenn Sie noch kein Windows- Paket für die AnwendungspaketErstellung haben, erstellen Sie es, und fügen Sie es der Projekt Mappe hinzu.If you don't already have a Windows Application Packaging Project, create one and add it to your solution. Erstellen Sie ein neues Visual c#-> Windows-App-Paket für die universelle > Windows-Anwendung , und fügen Sie es ihrer neu erstellten Projekt Mappe hinzu.Create a new Visual C# -> Windows Universal -> Windows Application Packaging Project and add it to your newly created solution.

Weitere Informationen zum Paket Erstellungs Projekt für Windows-Anwendungen finden Sie unter Verpacken der Anwendung mithilfe von Visual Studio.For more information on Windows Application Packaging project, see Package your application by using Visual Studio.

Klicken Sie in Projektmappen-Explorermit der rechten Maustaste auf das Paket Erstellungs Projekt, wählen Sie Bearbeitenaus, und fügen Sie es dann am Ende der Projektdatei hinzu: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>

Schritt 3: Hinzufügen eines Projekts für die Lauf ZeitkorrekturStep 3: Add project for the runtime fix

Fügen Sie der Projekt Mappe ein neues Visual C++ > Windows-Desktop-> Dynamic-Link Library (dll) -Projekt hinzu.Add a new Visual C++ -> Windows Desktop -> Dynamic-Link Library (DLL) project to the solution.

Klicken Sie als nächstes mit der rechten Maustaste auf das Projekt, und wählen Sie dann Eigenschaftenaus.Next, right-click the that project, and then choose Properties.

Suchen Sie auf der Eigenschaften Seite das Feld Konfigurations Eigenschaften-> C/C++-> Language-> C++ Language Standard .In the property page, locate the Configuration Properties -> C/C++ -> Language -> C++ Language Standard field. Wählen Sie dann im Dropdown Menü ISO c++ 17 Standard (/Std: c++ 17) aus.Then select ISO C++17 Standard (/std:c++17) from the drop-down menu.

Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie dann im Kontextmenü die Option nuget-Pakete verwalten aus.Right-click on the project, and then in the context menu, choose the Manage Nuget Packages option. Stellen Sie sicher, dass die Option Paketquelle auf alle oder nuget.orgfestgelegt ist.Ensure that the Package source option is set to All or nuget.org.

Klicken Sie auf das Symbol "Einstellungen" neben diesem Feld.Click the settings icon next that field.

Suchen Sie in den nuget-Paketen nach PSF, und installieren Sie dann Microsoft. packagesupportframework für dieses Projekt.Search the Nuget packages for PSF, then install the Microsoft.PackageSupportFramework for this project.

nuget-paket

Schritt 4: Hinzufügen eines Projekts, das die ausführbare PSF-Start Programmdatei startetStep 4: Add a project that starts the PSF Launcher executable

Fügen Sie der Projekt Mappe ein neues Visual C++ > Allgemein > leeres Projekt hinzu.Add a new Visual C++ -> General -> Empty Project to the solution.

Führen Sie die folgenden Schritte aus:Do the following steps:

  1. Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie dann im Kontextmenü die Option nuget-Pakete verwalten aus.Right-click that project, and then in the context menu, choose the Manage Nuget Packages option. Stellen Sie sicher, dass die Option Paketquelle auf alle oder nuget.orgfestgelegt ist.Ensure that the Package source option is set to All or nuget.org.
  2. Klicken Sie auf das Symbol "Einstellungen" neben diesem Feld.Click the settings icon next that field.
  3. Suchen Sie in den nuget-Paketen nach PSF, und installieren Sie dann Microsoft. packagesupportframework für dieses Projekt.Search the Nuget packages for PSF, then install the Microsoft.PackageSupportFramework for this project.

Öffnen Sie die Eigenschaften Seiten für das Projekt, und legen Sie auf der Seite Allgemeine Einstellungen die Eigenschaft Ziel Name auf oder fest, PSFLauncher32 abhängig von PSFLauncher64 der Architektur Ihrer Anwendung.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.

Fügen Sie dem Lauf Zeitkorrektur Projekt in der Projekt Mappe einen Projekt Verweis hinzu.Add a project reference to the runtime fix project in your solution.

Klicken Sie mit der rechten Maustaste auf den Verweis, und wenden Sie dann im Eigenschaften Fenster diese Werte an.Right-click the reference, and then in the Properties window, apply these values.

EigenschaftProperty ValueValue
Lokale KopieCopy local TrueTrue
Lokale Satellitenassemblys kopierenCopy Local Satellite Assemblies TrueTrue
VerweisassemblyausgabeReference Assembly Output TrueTrue
Bibliothekabhängigkeiten verknüpfenLink Library Dependencies FalseFalse
Verknüpfen von Bibliotheks Abhängigkeits EingabenLink Library Dependency Inputs FalseFalse

Schritt 5: Konfigurieren des Paket Erstellungs ProjektsStep 5: Configure the packaging project

Führen Sie die folgenden Schritte aus, um das Paket Projekt zu konfigurieren:To configure the packaging project do the following steps:

  1. Klicken Sie im Paket Erstellungs Projekt mit der rechten Maustaste auf den Ordner Anwendungen , und wählen Sie dann im Dropdown Menü Verweis hinzufügen aus.In the packaging project, right-click the Applications folder, and then choose Add Reference from the dropdown menu.
  2. Wählen Sie das PSF-Start Programm Projekt und Ihr Desktop Anwendungsprojekt aus, und klicken Sie dann auf die Schaltfläche OK .Choose the PSF Launcher project and your desktop application project, and then choose the OK button.
  3. Wählen Sie das PSF -Start Programm und das Desktop Anwendungs Projekt aus, und klicken Sie dann auf die Schaltfläche OK.Select both the PSF Launcher and the Desktop Application project, then click the Ok button. Wenn der Quellcode der Anwendung nicht verfügbar ist, wählen Sie nur das PSF-Start Programm Projekt aus.If the application source code is not available, select only the PSF Launcher project.
  4. Klicken Sie im Knoten Anwendungen mit der rechten Maustaste auf die PSF-Start Programm Anwendung, und wählen Sie dann als Einstiegspunkt festlegenaus.In the Applications node, right-click the PSF Launcher application, and then choose Set as Entry Point.

Fügen Sie dem config.json Paketierungs Projekt eine Datei mit dem Namen hinzu, kopieren Sie den folgenden JSON-Text, und fügen Sie ihn in die Datei ein.Add a file named config.json to your packaging project, then, copy and paste the following json text into the file. Legen Sie die Eigenschaft Paketaktion auf Inhaltfest.Set the Package Action property to Content.

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

Geben Sie einen Wert für jeden Schlüssel an.Provide a value for each key. Verwenden Sie diese Tabelle als Richtlinie.Use this table as a guide.

ArrayArray Schlüsselkey ValueValue
applicationsapplications IDid Verwenden Sie den Wert des- Id Attributs des- Application Elements im Paket Manifest.Use the value of the Id attribute of the Application element in the package manifest.
applicationsapplications executableexecutable Der Paket relative Pfad zur ausführbaren Datei, die Sie starten möchten.The package-relative path to the executable that you want to start. In den meisten Fällen können Sie diesen Wert aus der Paket Manifest-Datei erhalten, bevor Sie ihn ändern.In most cases, you can get this value from your package manifest file before you modify it. Dies ist der Wert des- Executable Attributs des- Application Elements.It's the value of the Executable attribute of the Application element.
applicationsapplications workingDirectoryworkingDirectory Optionale Ein Paket relativer Pfad, der als Arbeitsverzeichnis der Anwendung verwendet werden soll, die gestartet wird.(Optional) A package-relative path to use as the working directory of the application that starts. Wenn Sie diesen Wert nicht festlegen, verwendet das Betriebssystem das System32 Verzeichnis als Arbeitsverzeichnis der Anwendung.If you don't set this value, the operating system uses the System32 directory as the application's working directory.
Prozesseprocesses executableexecutable In den meisten Fällen ist dies der Name der executable oben konfigurierten, wobei der Pfad und die Dateierweiterung entfernt wurden.In most cases, this will be the name of the executable configured above with the path and file extension removed.
Fixupsfixups DLL-Dateidll Paket relativer Pfad zur Fixup-dll, die geladen werden soll.Package-relative path to the fixup DLL to load.
Fixupsfixups configconfig Optionale Steuert, wie sich die Fixup-dll verhält.(Optional) Controls how the fixup DLL behaves. Das genaue Format dieses Werts variiert je nach Fixup, da jedes Fixup dieses "BLOB" wie erwartet interpretieren kann.The exact format of this value varies on a fixup-by-fixup basis as each fixup can interpret this "blob" as it wants.

Wenn Sie fertig sind, config.json sieht die Datei in etwa wie folgt aus.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" } ]
    }
  ]
}

Hinweis

Die applications processes Schlüssel, und fixups sind Arrays.The applications, processes, and fixups keys are arrays. Dies bedeutet, dass Sie die Datei "config. JSON" verwenden können, um mehr als eine Anwendung, einen Prozess und eine Fixup-DLL anzugeben.That means that you can use the config.json file to specify more than one application, process, and fixup DLL.

Debuggen einer Lauf ZeitkorrekturDebug a runtime fix

Drücken Sie in Visual Studio F5, um den Debugger zu starten.In Visual Studio, press F5 to start the debugger. Der erste Schritt ist die PSF-Start Programm Anwendung, die ihrerseits ihre Ziel Desktop Anwendung startet.The first thing that starts is the PSF Launcher application, which in turn, starts your target desktop application. Wenn Sie die Ziel Desktop Anwendung debuggen möchten, müssen Sie Sie manuell an den Desktop Anwendungsprozess anfügen, indem Sie Debuggen >an den Prozess anhängenauswählen und dann den Anwendungsprozess auswählen.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. Um das Debuggen einer .NET-Anwendung mit einer systemeigenen Runtime Fix-dll zuzulassen, wählen Sie verwaltete und systemeigene Codetypen (Debuggen im gemischten Modus).To permit the debugging of a .NET application with a native runtime fix DLL, select managed and native code types (mixed mode debugging).

Sie können Breakpoints neben Codezeilen im Desktop Anwendungscode und im Lauf Zeitkorrektur-Projekt festlegen.You can set break points next to lines of code in the desktop application code and the runtime fix project. Wenn Sie nicht über den Quellcode für Ihre Anwendung verfügen, können Sie Breakpoints nur neben Codezeilen im Lauf Zeitkorrektur Projekt festlegen.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.