Anwenden des Frameworks zur Paketunterstützung in Visual Studio

Das Package Support Framework (PSF) ist ein Open Source Projekt, mit dem Sie Korrekturen auf Ihre vorhandene Desktopanwendung anwenden können. Mit der PSF kann eine Anwendung in einem MSIX-verpackten Format ausgeführt werden, 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 werden wir untersuchen, wie Sie ein neues Visual Studio-Projekt erstellen, Paketunterstützungsframework zur Lösung einschließen und Laufzeitkorrekturen erstellen.

Schritt 1: Erstellen einer Paketlösung in Visual Studio

Erstellen Sie in Visual Studio eine neue Visual Studio Lösungen, leere Lösung. Fügen Sie alle Anwendungsprojekte zur neu erstellten leeren Lösung ein.

Schritt 2: Hinzufügen eines Paketprojekts

Wenn Sie noch keine Windows Application Packaging Project haben, erstellen Sie eine, und fügen Sie sie ihrer Lösung hinzu. Erstellen Sie ein neues Visual C# - Windows Universal ->> Windows Application Packaging Project und fügen Sie es zu Ihrer neu erstellten Lösung hinzu.

Weitere Informationen zu Windows Application Packaging-Projekt finden Sie unter "Verpacken Ihrer Anwendung mithilfe 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 dann unten in 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 von Projekt für die Laufzeitkorrektur

Fügen Sie ein neues Visual C++ -> Windows Desktop -> Dynamic-Link Library (DLL) Projekt zur Lösung hinzu.

Klicken Sie dann mit der rechten Maustaste auf das projekt, und wählen Sie dann "Eigenschaften" aus.

Suchen Sie auf der Eigenschaftenseite nach den Konfigurationseigenschaften -> C/C++ - Language -> C++> Language Standard field. Wählen Sie dann iso C++17 Standard (/std:c++17) aus dem Dropdownmenü 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 Symbol "Einstellungen" neben diesem Feld.

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

nuget package

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

Fügen Sie eine neue Visual C++ -> Allgemein -> Leere Project zur Lösung hinzu.

Führen Sie die folgenden Schritte aus:

  1. Klicken Sie mit der rechten Maustaste auf dieses 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 Symbol "Einstellungen" neben diesem Feld.
  3. Suchen Sie die Nuget-Pakete für PSF, und installieren Sie dann das 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 " auf PSFLauncher32 oder PSFLauncher64 je nach Architektur Ihrer Anwendung fest.

Fügen Sie einen Projektverweis zum Laufzeitfixprojekt in Ihrer Lösung hinzu.

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

Eigenschaft value
Lokal kopieren True
Lokale Satellitenassemblys kopieren True
Verweisassemblyausgabe True
Bibliothekabhängigkeiten verknüpfen Falsch
Verknüpfungsbibliotheks-Abhängigkeitseingaben Falsch

Schritt 5: Konfigurieren des Paketprojekts

Führen Sie die folgenden Schritte aus, um das Paketprojekt zu konfigurieren:

  1. Klicken Sie im Paketprojekt mit der rechten Maustaste auf den Ordner "Anwendungen ", und wählen Sie dann " Verweis hinzufügen " im Dropdownmenü aus.
  2. Wählen Sie das PSF-Startprogramm-Projekt und Ihr Desktopanwendungsprojekt aus, und wählen Sie dann die Schaltfläche "OK" aus.
  3. Wählen Sie sowohl das PSF-Startprogramm als auch das Desktopanwendungsprojekt aus, und klicken Sie dann auf die Schaltfläche "Ok". Wenn der Anwendungscode nicht verfügbar ist, wählen Sie nur das PSF-Startprogramm Projekt 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 dem Verpackungsprojekt eine Datei mit dem config.json Namen hinzu, kopieren Und einfügen Sie den folgenden JSON-Text in die Datei. Legen Sie die Paketaktionseigenschaft auf Content 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 Schlüssel value
applications id Verwenden Sie den Wert des Attributs des IdApplication Elements im Paketmanifest.
applications executable Der paketrelative 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. Es ist der Executable Wert des Attributs des Application Elements.
applications workingDirectory (Optional) Ein paketrelativer Pfad, der als Arbeitsverzeichnis der Anwendung verwendet werden soll, die gestartet wird. 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 Dateierweiterung, wobei der Pfad und die Dateierweiterung entfernt wurden.
Fixups DLL-Datei Paketrelativer Pfad zur Fixup-DLL zum Laden.
Fixups config (Optional) Steuert, wie sich die Fixup-DLL verhält. Das genaue Format dieses Werts variiert auf einer Fixup-by-Fixup-Basis, da jedes Fixup dieses "Blob" so interpretiert, wie es möchte.

Wenn Sie fertig sind, sieht ihre config.json Datei wie folgt aus.

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

Hinweis

Die , processes, und fixups die applicationsSchlüssel sind Arrays. Das bedeutet, dass Sie die config.json-Datei verwenden können, um mehrere Anwendungen, Prozesse und Fixup-DLL anzugeben.

Debuggen eines Runtime-Fixs

Drücken Sie in Visual Studio F5, um den Debugger zu starten. Das erste, was gestartet wird, ist die PSF-Startprogramm-Anwendung, die wiederum Ihre Zieldesktopanwendung startet. Um die Zieldesktopanwendung zu debuggen, müssen Sie manuell an den Desktopanwendungsprozess anfügen, indem Sie Debug-Anfügen> an Prozess auswählen und dann den Anwendungsprozess auswählen. Um das Debuggen einer .NET-Anwendung mit einer systemeigenen Runtime-Fix-DLL zu ermöglichen, wählen Sie verwaltete und native Codetypen (Mixed Mode Debugging) aus.

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