Anwenden des Frameworks zur Paketunterstützung in Visual Studio

Das Paketunterstützungsframework (Package Support Framework, PSF) ist ein Open-Source-Projekt, mit dem Sie Fixes auf Ihre vorhandene Desktopanwendung anwenden können. Die PSF ermöglicht es einer Anwendung, in einem MSIX-gepackten Format auszuführen, ohne Code zu ändern. Durch das Package Support Framework können in Ihrer Anwendung die bewährten Methoden moderner Laufzeitumgebungen angewandt werden.

In den folgenden Abschnitten erfahren Sie, wie Sie ein neues Visual Studio-Projekt erstellen, das Paketunterstützungsframework in die Projektmappe einschließen und Laufzeitkorrekturen erstellen.

Schritt 1: Erstellen einer Paketlösung in Visual Studio

Erstellen Sie in Visual Studio eine neue Visual Studio Projektmappe, Leere Projektmappe. Schließen Sie alle Anwendungsprojekte in die neu erstellte leere Projektmappe ein.

Schritt 2: Hinzufügen eines Paketprojekts

Wenn Sie noch nicht über eine Windows Anwendungspaketerstellung Project verfügen, erstellen Sie eine , und fügen Sie sie Ihrer Lösung hinzu. Erstellen Sie eine neue Visual C#-> Windows Universal -> Windows Application Packaging-Project, und fügen Sie sie Ihrer neu erstellten Projektmappe hinzu.

Weitere Informationen zum Windows Application Packaging-Projekt finden Sie unter Packen Ihrer Anwendung mithilfe von Visual Studio.

Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Paketprojekt, wählen Sie Project Datei bearbeiten aus, und fügen Sie dies am Ende der Projektdatei hinzu:

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

Schritt 3: Hinzufügen eines Projekts für die Laufzeitkorrektur

Fügen Sie der Projektmappe ein neues PROJEKT vom Visual C++ -> Windows Desktop -> Dynamic-Link Library (DLL) hinzu.

Klicken Sie als Nächstes mit der rechten Maustaste auf das Projekt, und wählen Sie eigenschaften aus.

Suchen Sie auf der Eigenschaftenseite das Feld Konfigurationseigenschaften -> C/C++ -> Language -> C++-Sprachstandard. Wählen Sie dann im Dropdownmenü ISO C++17 Standard (/std:c++17) aus.

Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie dann im Kontextmenü die Option NuGet-Pakete verwalten aus. Stellen Sie sicher, dass die Option Paketquelle auf Alle oder nuget.org festgelegt ist.

Klicken Sie auf das Einstellungssymbol neben diesem Feld.

Suchen Sie die NuGet-Pakete nach PSF, und installieren Sie dann Microsoft.PackageSupportFramework für dieses Projekt.

nuget-paket

Schritt 4: Hinzufügen eines Projekts, das die PSF-Startprogramm ausführbare Datei startet

Fügen Sie der Projektmappe einen neuen Visual C++ -> General -> Empty Project hinzu.

Führen Sie die folgenden Schritte aus:

  1. Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie dann im Kontextmenü die Option NuGet-Pakete verwalten aus. Stellen Sie sicher, dass die Option Paketquelle auf Alle oder nuget.org festgelegt ist.
  2. Klicken Sie auf das Einstellungssymbol neben diesem Feld.
  3. Suchen Sie die NuGet-Pakete nach PSF, und installieren Sie dann Microsoft.PackageSupportFramework für dieses Projekt.

Öffnen Sie die Eigenschaftenseiten für das Projekt, und legen Sie auf der Seite Allgemeine Einstellungen die Eigenschaft Zielname PSFLauncher32 auf oder abhängig von der Architektur Ihrer Anwendung PSFLauncher64 fest.

Fügen Sie einen Projektverweis auf das Laufzeitkorrekturprojekt in Ihrer Projektmappe hinzu.

Klicken Sie mit der rechten Maustaste auf den Verweis, und wenden Sie dann im Eigenschaftenfenster diese Werte an.

Eigenschaft Wert
Lokales Kopieren True
Lokale Satellitenassemblys kopieren True
Verweisassemblyausgabe Richtig
Bibliothekabhängigkeiten verknüpfen Falsch
Verknüpfungsbibliotheksabhängigkeitseingaben Falsch

Schritt 5: Konfigurieren des Paketprojekts

Gehen Sie wie folgt vor, um das Paketprojekt zu konfigurieren:

  1. Klicken Sie im Paketprojekt mit der rechten Maustaste auf den Ordner Anwendungen, und wählen Sie dann im Dropdownmenü Verweis hinzufügen aus.
  2. Wählen Sie das PROJEKT PSF Startprogramm und Ihr Desktopanwendungsprojekt und dann die Schaltfläche OK aus.
  3. Wählen Sie sowohl die PSF-Startprogramm als auch das Desktopanwendungsprojekt aus, und klicken Sie dann auf die Schaltfläche OK. Wenn der Quellcode der Anwendung nicht verfügbar ist, wählen Sie nur das PROJEKT PSF Startprogramm aus.
  4. Klicken Sie im Knoten Anwendungen mit der rechten Maustaste auf die PSF-Startprogramm Anwendung, und wählen Sie dann Als Einstiegspunkt festlegen aus.

Fügen Sie ihrem Paketprojekt eine Datei mit dem Namen config.json hinzu, kopieren Sie den folgenden JSON-Text, und fügen Sie ihn in die Datei ein. Legen Sie die Eigenschaft Paketaktion auf Inhalt fest.

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

Geben Sie einen Wert für jeden Schlüssel an. Verwenden Sie diese Tabelle als Richtlinie.

Array key Wert
applications id Verwenden Sie den Wert des Id -Attributs des Application -Elements im Paketmanifest.
applications executable Der paketbezogene Pfad zur ausführbaren Datei, die Sie starten möchten. In den meisten Fällen können Sie diesen Wert aus der Paketmanifestdatei abrufen, bevor Sie ihn ändern. Dies ist der Wert des Executable -Attributs des Application -Elements.
applications workingDirectory (Optional) Ein paketrelativer Pfad, der als Arbeitsverzeichnis der gestarteten Anwendung verwendet werden soll. Wenn Sie diesen Wert nicht festlegen, verwendet das Betriebssystem das System32 Verzeichnis als Arbeitsverzeichnis der Anwendung.
Prozesse executable In den meisten Fällen ist dies der Name der executable oben konfigurierten , wobei der Pfad und die Dateierweiterung entfernt wurden.
Fixups DLL-Datei Paketreleativer Pfad zur zu ladenden Fixup-DLL.
Fixups config (Optional) Steuert das Verhalten der Fixup-DLL. Das genaue Format dieses Werts variiert auf fixup-by-fixup-Basis, da jedes Fixup dieses "Blob" wie gewünscht interpretieren kann.

Wenn Sie fertig sind, sieht Ihre config.json Datei in etwa wie folgt aus.

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

Hinweis

Die applications processes Schlüssel , und sind fixups Arrays. Das bedeutet, dass Sie die config.jsin der Datei verwenden können, um mehrere Anwendungen, Prozesse und Fehlerbehebungs-DLLs anzugeben.

Debuggen einer Laufzeitkorrektur

Drücken Sie in Visual Studio F5, um den Debugger zu starten. Als Erstes wird die PSF-Startprogramm-Anwendung gestartet, die wiederum Ihre Zieldesktopanwendung startet. Um die Zieldesktopanwendung zu debuggen, müssen Sie manuell an den Desktopanwendungsprozess anhängen, indem Sie Debuggen->An Den Prozess anhängen auswählen und dann den Anwendungsprozess auswählen. Wählen Sie verwaltete und native Codetypen (Debuggen im gemischten Modus) aus, um das Debuggen einer .NET-Anwendung mit einer dll-Dll zur Fehlerbehebung für native Runtime zuzulassen.

Sie können Haltepunkte neben Codezeilen im Desktopanwendungscode und im Laufzeitkorrekturprojekt festlegen. Wenn Sie nicht über den Quellcode für Ihre Anwendung verfügen, können Sie Haltepunkte nur neben Codezeilen in Ihrem Laufzeitkorrekturprojekt festlegen.