Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 paketierten Format ausgeführt werden, ohne Code zu ändern. Das Paketunterstützungsframework hilft Ihrer Anwendung dabei, die bewährten Methoden der modernen Laufzeitumgebung zu befolgen.
In den folgenden Abschnitten erfahren Sie, wie Sie ein neues Visual Studio-Projekt erstellen, Paketsupportframework zur Lösung hinzufügen und Laufzeitfixes erstellen.
Schritt 1: Erstellen einer Paketlösung in Visual Studio
Erstellen Sie in Visual Studio eine neue Visual Studio-Lösung, leere Lösung. Fügen Sie alle Anwendungsprojekte zur neu erstellten leeren Lösung hinzu.
Schritt 2: Hinzufügen eines Paketprojekts
Wenn Sie noch nicht über ein Windows Application Packaging-Projekt verfügen, erstellen Sie ein Projekt, und fügen Sie es Zu Ihrer Lösung hinzu. Erstellen Sie ein neues Visual C#-Projekt –> Windows Universal –> Windows Application Packaging Project , und fügen Sie es ihrer neu erstellten Lösung hinzu.
Weitere Informationen zum Windows Application Packaging-Projekt finden Sie unter Packen Ihrer Anwendung mithilfe von Visual Studio.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Paketprojekt, wählen Sie "Projektdatei 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 Lösung ein neues Projekt Visual C++ –> Windows Desktop –> Dynamic Link Library (DLL) hinzu.
Klicken Sie dann mit der rechten Maustaste auf das Projekt, und wählen Sie dann "Eigenschaften" aus.
Suchen Sie auf der Eigenschaftenseite das Feld "Konfigurationseigenschaften -> C/C++" -> "Sprache -> 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 Symbol "Einstellungen" neben diesem Feld.
Durchsuchen Sie die Nuget-Pakete für PSF, und installieren Sie dann das Microsoft.PackageSupportFramework für dieses Projekt.
Schritt 4: Hinzufügen eines Projekts, das die ausführbare Datei für das PSF-Startprogramm startet
Fügen Sie der Lösung ein neues Visual C++ –> Allgemein –> Leeres Projekt hinzu.
Führen Sie die folgenden Schritte aus:
- 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.
- Klicken Sie auf das Symbol "Einstellungen" neben diesem Feld.
- Durchsuchen 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 abhängig von der Architektur Ihrer Anwendung fest.
Fügen Sie einen Projektverweis zum Laufzeitkorrekturprojekt in Ihrer Lösung hinzu.
Klicken Sie mit der rechten Maustaste auf den Verweis, und wenden Sie dann im Eigenschaftenfenster diese Werte an.
| Eigentum | Wert |
|---|---|
| Lokal kopieren | Richtig |
| Lokale Satellitenassemblys kopieren | Richtig |
| Referenzassemblyausgabe | Richtig |
| Verknüpfungsbibliotheksabhängigkeiten | Falsch |
| Eingaben für Bibliotheksabhängigkeit verknüpfen | Falsch |
Schritt 5: Konfigurieren des Paketprojekts
Führen Sie die folgenden Schritte aus, um das Paketprojekt zu konfigurieren:
- Klicken Sie im Paketprojekt mit der rechten Maustaste auf den Ordner "Anwendungen ", und wählen Sie dann im Dropdownmenü " Verweis hinzufügen " aus.
- Wählen Sie das PSF-Startprogrammprojekt und das Desktopanwendungsprojekt aus, und klicken Sie dann auf die Schaltfläche "OK ".
- Wählen Sie sowohl das PSF-Startprogramm als auch das Desktopanwendungsprojekt aus, und klicken Sie dann auf die Schaltfläche "OK". Wenn der Anwendungsquellcode nicht verfügbar ist, wählen Sie nur das PSF-Startprogrammprojekt aus.
- Klicken Sie im Knoten "Anwendungen" mit der rechten Maustaste auf die PSF-Startprogrammanwendung, und wählen Sie dann "Als Einstiegspunkt festlegen" aus.
Fügen Sie ihrem Paketprojekt eine Datei mit dem Namen config.json hinzu, kopieren Sie dann 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.
| Anordnung | Schlüssel | Wert |
|---|---|---|
| Anwendungen | ID | Verwenden Sie den Wert des Attributs Id des Application Elements im Paketmanifest. |
| Anwendungen | ausführbare Datei | 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 Wert des Executable Attributs des Application Elements. |
| Anwendungen | 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. |
| Abläufe | ausführbare Datei | In den meisten Fällen ist dies der Name des oben konfigurierten executable, wobei der Pfad und die Dateierweiterung entfernt wurden. |
| Fixups | DLL | Paketrelativer Pfad zur zu ladenden Fixup-DLL. |
| Fixups | Konfiguration | (Optional) Steuert, wie sich die Fixup-DLL verhält. Das genaue Format dieses Werts variiert von Fixup zu Fixup, da jedes Fixup diesen "Blob" interpretieren kann, wie es möchte. |
Wenn Sie fertig sind, sieht ihre config.json Datei ungefähr wie folgt aus.
{
"applications": [
{
"id": "DesktopApplication",
"executable": "DesktopApplication/WinFormsDesktopApplication.exe",
"workingDirectory": "WinFormsDesktopApplication"
}
],
"processes": [
{
"executable": ".*App.*",
"fixups": [ { "dll": "RuntimeFix.dll" } ]
}
]
}
Hinweis
Die applications, processes und fixups Schlüssel sind Arrays. Dies bedeutet, dass Sie die config.json Datei verwenden können, um mehrere Anwendungen, Prozesse und Fixup-DLL anzugeben.
Debuggen eines Laufzeitfixes
Drücken Sie in Visual Studio F5, um den Debugger zu starten. Das Erste, was gestartet wird, ist die PSF-Launcher-Anwendung, die wiederum Ihre Zieldesktopanwendung startet. Um die Zieldesktopanwendung zu debuggen, müssen Sie den Desktopanwendungsprozess manuell anfügen, indem Sie "Debuggen> an Prozess anfügen" auswählen und dann den Anwendungsprozess auswählen. Um das Debuggen einer .NET-Anwendung mit einer systemeigenen Laufzeit-Fix-DLL zuzulassen, wählen Sie verwaltete und systemeigene Codetypen (Mixed Mode Debugging) aus.
Sie können Haltepunkte neben Codezeilen im Desktopanwendungscode und dem 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.