Appliquer Package Support Framework dans Visual Studio

Le Package Support Framework (PSF) est un projet code source ouvert qui vous permet d’appliquer des correctifs à votre application de bureau existante. PsF permet à une application de s’exécuter dans un format empaqueté sans modifier le code. Le Framework de prise en charge de package aide votre application à respecter les bonnes pratiques de l’environnement d’exécution moderne.

Dans les sections suivantes, nous allons découvrir comment créer un projet Visual Studio, inclure Package Support Framework à la solution et créer des correctifs d’exécution.

Étape 1 : Créer une solution de package dans Visual Studio

Dans Visual Studio, créez une solution Visual Studio vide. Incluez tous les projets d’application dans la solution vide nouvellement créée.

Étape 2 : Ajouter un projet d’empaquetage

Si vous n’avez pas encore de projet d’empaquetage d’applications Windows, créez-en un et ajoutez-le à votre solution. Créez un projet visual C# -> Windows Universal -> Application Packaging Project et ajoutez-le à votre solution nouvellement créée.

Pour plus d’informations sur le projet d’empaquetage d’applications Windows, consultez Empaqueter votre application à l’aide de Visual Studio.

Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet d’empaquetage, sélectionnez Modifier le fichier projet, puis ajoutez-le au bas du fichier projet :

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

Étape 3 : Ajouter un projet pour le correctif d’exécution

Ajoutez un nouveau projet Visual C++ -> Windows Desktop -> Dll (Dynamic-Link Library) à la solution.

Ensuite, cliquez avec le bouton droit sur ce projet, puis choisissez Propriétés.

Dans la page de propriétés, recherchez le champ Propriétés de configuration -> C/C++ -> Langage -> C++ Language Standard . Sélectionnez ensuite ISO C++17 Standard (/std :c++17) dans le menu déroulant.

Cliquez avec le bouton droit sur le projet, puis dans le menu contextuel, choisissez l’option Gérer les packages Nuget. Vérifiez que l’option source du package est définie sur All ou nuget.org.

Cliquez sur l’icône paramètres en regard de ce champ.

Recherchez les packages Nuget pour PSF, puis installez Microsoft.PackageSupportFramework pour ce projet.

nuget package

Étape 4 : Ajouter un projet qui démarre l’exécutable Lanceur PSF

Ajoutez un nouveau projet Visual C++ -> Général -> Vide à la solution.

Procédez comme suit :

  1. Cliquez avec le bouton droit sur ce projet, puis, dans le menu contextuel, choisissez l’option Gérer les packages Nuget. Vérifiez que l’option source du package est définie sur All ou nuget.org.
  2. Cliquez sur l’icône paramètres en regard de ce champ.
  3. Recherchez les packages Nuget pour PSF, puis installez Microsoft.PackageSupportFramework pour ce projet.

Ouvrez les pages de propriétés du projet et, dans la page Paramètres généraux, définissez la propriété PSFLauncher32 Nom cible sur ou PSFLauncher64 en fonction de l’architecture de votre application.

Ajoutez une référence de projet au projet de correctif d’exécution dans votre solution.

Cliquez avec le bouton droit sur la référence, puis dans la fenêtre Propriétés , appliquez ces valeurs.

Propriété Valeur
Copier localement True
Copier les assemblys satellites locaux True
Sortie de l’assembly de référence True
Lier les dépendances de la bibliothèque False
Entrées de dépendance de bibliothèque de liens False

Étape 5 : Configurer le projet d’empaquetage

Pour configurer le projet d’empaquetage, procédez comme suit :

  1. Dans le projet d’empaquetage, cliquez avec le bouton droit sur le dossier Applications , puis choisissez Ajouter une référence dans le menu déroulant.
  2. Choisissez le projet PSF Lanceur et votre projet d’application de bureau, puis cliquez sur le bouton OK.
  3. Sélectionnez les Lanceur PSF et le projet Application de bureau, puis cliquez sur le bouton Ok. Si le code source de l’application n’est pas disponible, sélectionnez uniquement le projet Lanceur PSF.
  4. Dans le nœud Applications, cliquez avec le bouton droit sur l’application Lanceur PSF, puis choisissez Définir comme point d’entrée.

Ajoutez un fichier nommé config.json à votre projet d’empaquetage, puis copiez et collez le texte json suivant dans le fichier. Définissez la propriété Action de package sur Content.

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

Fournissez une valeur pour chaque clé. Utilisez ce tableau comme guide.

Tableau key Valeur
applications id Utilisez la valeur de l’attribut Id de l’élément Application dans le manifeste du package.
applications executable Chemin d’accès relatif au package vers l’exécutable que vous souhaitez démarrer. Dans la plupart des cas, vous pouvez obtenir cette valeur à partir de votre fichier manifeste de package avant de le modifier. Il s’agit de la valeur de l’attribut Executable de l’élément Application .
applications workingDirectory (Facultatif) Chemin relatif au package à utiliser comme répertoire de travail de l’application qui démarre. Si vous ne définissez pas cette valeur, le système d’exploitation utilise le System32 répertoire comme répertoire de travail de l’application.
processus executable Dans la plupart des cas, il s’agit du nom du executable fichier configuré ci-dessus avec le chemin d’accès et l’extension de fichier supprimés.
correctifs dll Chemin relatif au package vers la DLL de correction à charger.
correctifs config (Facultatif) Contrôle le comportement de la DLL de correction. Le format exact de cette valeur varie selon un correctif par correction, car chaque correctif peut interpréter ce « blob » comme il le souhaite.

Lorsque vous avez terminé, votre config.json fichier ressemblera à ceci.

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

Remarque

Les applicationstableaux et processesfixups les clés sont des tableaux. Cela signifie que vous pouvez utiliser le fichier config.json pour spécifier plusieurs applications, processus et DLL de correction.

Déboguer un correctif d’exécution

Dans Visual Studio, appuyez sur F5 pour démarrer le débogueur. La première chose qui démarre est l’application Lanceur PSF, qui démarre à son tour votre application de bureau cible. Pour déboguer l’application de bureau cible, vous devez attacher manuellement le processus d’application de bureau en choisissant Déboguer-Attacher> au processus, puis en sélectionnant le processus d’application. Pour autoriser le débogage d’une application .NET avec une DLL de correctif d’exécution native, sélectionnez des types de code managés et natifs (débogage en mode mixte).

Vous pouvez définir des points d’arrêt en regard des lignes de code dans le code de l’application de bureau et le projet de correctif d’exécution. Si vous n’avez pas le code source de votre application, vous pouvez définir des points d’arrêt uniquement en regard des lignes de code dans votre projet de correctif d’exécution.