Appliquer Package Support Framework dans Visual StudioApply Package Support Framework in Visual Studio

L’infrastructure de prise en charge des packages est un projet open source qui vous permet d’appliquer des correctifs à votre application de bureau existante.The Package Support Framework (PSF) is an open source project that enables you to apply fixes to your existing desktop application. Les fibres discontinues de polyester permettent à une application de s’exécuter dans un format empaqueté MSIX sans modifier le code.The PSF enables an application to run in an MSIX packaged format without modifying code. Le Framework de prise en charge de package aide votre application à respecter les bonnes pratiques de l’environnement d’exécution moderne.The Package Support Framework helps your application follow the best practices of the modern runtime environment.

Dans les sections suivantes, nous allons découvrir comment créer un projet Visual Studio, inclure l’infrastructure de prise en charge des packages à la solution et créer des correctifs Runtime.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.

Étape 1 : créer une solution de package dans Visual StudioStep 1: Create a package solution in Visual Studio

Dans Visual Studio, créez une nouvelle solution Visual Studio, qui est vide.In Visual Studio, create a new Visual Studio Solutions, Blank Solution . Incluez tous les projets d’application à la solution vide nouvellement créée.Include any application projects to the newly created Blank Solution .

Étape 2 : ajouter un projet d’empaquetageStep 2: Add a packaging project

Si vous n’avez pas encore de projet de création de packages d’applications Windows , créez-en un et ajoutez-le à votre solution.If you don't already have a Windows Application Packaging Project , create one and add it to your solution. Créez un nouveau projet d’empaquetage d’applications windows > universelles windows > Visual C# et ajoutez-le à la solution que vous venez de créer.Create a new Visual C# -> Windows Universal -> Windows Application Packaging Project and add it to your newly created solution.

Pour plus d’informations sur le projet de packaging des applications Windows, consultez empaquetage de votre application à l’aide de Visual Studio.For more information on Windows Application Packaging project, see Package your application by using Visual Studio.

Dans Explorateur de solutions , cliquez avec le bouton droit sur le projet Packaging, sélectionnez modifier le fichier projet , puis ajoutez-le au bas du fichier projet :In Solution Explorer , right-click the packaging project, select Edit Project File , 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>
</Project>

Étape 3 : ajouter un projet pour le correctif du RuntimeStep 3: Add project for the runtime fix

Ajoutez un nouveau Visual C++ > projet de bibliothèque de Dynamic-Link de > Windows (dll) à la solution.Add a new Visual C++ -> Windows Desktop -> Dynamic-Link Library (DLL) project to the solution.

Ensuite, cliquez avec le bouton droit sur le projet, puis choisissez Propriétés .Next, right-click the that project, and then choose Properties .

Dans la page de propriétés, recherchez les Propriétés de configuration-> C/C++-> Language-> langage C++ standard .In the property page, locate the Configuration Properties -> C/C++ -> Language -> C++ Language Standard field. Sélectionnez ensuite ISO C++ 17 standard (/std : c++ 17) dans le menu déroulant.Then select ISO C++17 Standard (/std:c++17) from the drop-down menu.

Cliquez avec le bouton droit sur le projet, puis, dans le menu contextuel, choisissez l’option gérer les packages NuGet .Right-click on the project, and then in the context menu, choose the Manage Nuget Packages option. Assurez-vous que l’option source du package est définie sur All ou NuGet.org .Ensure that the Package source option is set to All or nuget.org .

Cliquez sur l’icône des paramètres à côté de ce champ.Click the settings icon next that field.

Recherchez les paquets NuGet pour les fibres discontinues, puis installez Microsoft. PackageSupportFramework pour ce projet.Search the Nuget packages for PSF , then install the Microsoft.PackageSupportFramework for this project.

package nuget

Étape 4 : ajouter un projet qui démarre l’exécutable du lanceur de fibres discontinuesStep 4: Add a project that starts the PSF Launcher executable

Ajoutez un nouveau Visual C++ > général-> projet vide à la solution.Add a new Visual C++ -> General -> Empty Project to the solution.

Procédez comme suit :Do the following steps:

  1. Cliquez avec le bouton droit sur ce projet puis, dans le menu contextuel, choisissez l’option gérer les packages NuGet .Right-click that project, and then in the context menu, choose the Manage Nuget Packages option. Assurez-vous que l’option source du package est définie sur All ou NuGet.org .Ensure that the Package source option is set to All or nuget.org .
  2. Cliquez sur l’icône des paramètres à côté de ce champ.Click the settings icon next that field.
  3. Recherchez les paquets NuGet pour les fibres discontinues, puis installez Microsoft. PackageSupportFramework pour ce projet.Search the Nuget packages for PSF, then install the Microsoft.PackageSupportFramework for this project.

Ouvrez les pages de propriétés du projet et, dans la page paramètres généraux , définissez la propriété nom cible sur PSFLauncher32 ou PSFLauncher64 en fonction de l’architecture de votre application.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.

Ajoutez une référence de projet au projet de correctif du runtime dans votre solution.Add a project reference to the runtime fix project in your solution.

Cliquez avec le bouton droit sur la référence, puis, dans la fenêtre Propriétés , appliquez ces valeurs.Right-click the reference, and then in the Properties window, apply these values.

PropriétéProperty ValeurValue
Copie localeCopy local TrueTrue
Copier les assemblys satellites locauxCopy Local Satellite Assemblies TrueTrue
Sortie de l’assembly de référenceReference Assembly Output TrueTrue
Lier les dépendances de la bibliothèqueLink Library Dependencies FalseFalse
Entrées de dépendance de la bibliothèque de liensLink Library Dependency Inputs FalseFalse

Étape 5 : configurer le projet de PackagingStep 5: Configure the packaging project

Pour configurer le projet de Packaging, procédez comme suit :To configure the packaging project do the following steps:

  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.In the packaging project, right-click the Applications folder, and then choose Add Reference from the dropdown menu.
  2. Choisissez le projet de lancement de fibres discontinues et votre projet d’application de bureau, puis choisissez le bouton OK .Choose the PSF Launcher project and your desktop application project, and then choose the OK button.
  3. Sélectionnez le lanceur de fibres discontinues et le projet d' application de bureau , puis cliquez sur le bouton OK.Select both the PSF Launcher and the Desktop Application project, then click the Ok button. Si le code source de l’application n’est pas disponible, sélectionnez uniquement le projet de lancement de fibres discontinues.If the application source code is not available, select only the PSF Launcher project.
  4. Dans le nœud applications , cliquez avec le bouton droit sur l’application du lanceur de fibres discontinues, puis choisissez définir comme point d’entrée .In the Applications node, right-click the PSF Launcher application, and then choose Set as Entry Point .

Ajoutez un fichier nommé config.json à votre projet de Packaging, puis copiez et collez le texte JSON suivant dans le fichier.Add a file named config.json to your packaging project, then, copy and paste the following json text into the file. Affectez à la propriété action de package la valeur contenu .Set the Package Action property to Content .

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

Fournissez une valeur pour chaque clé.Provide a value for each key. Utilisez ce tableau comme guide.Use this table as a guide.

ArrayArray keykey ValeurValue
applicationsapplications idid Utilisez la valeur de l' Id attribut de l' Application élément dans le manifeste du package.Use the value of the Id attribute of the Application element in the package manifest.
applicationsapplications executableexecutable Chemin d’accès relatif au package à l’exécutable que vous souhaitez démarrer.The package-relative path to the executable that you want to start. Dans la plupart des cas, vous pouvez récupérer cette valeur à partir de votre fichier manifeste de package avant de le modifier.In most cases, you can get this value from your package manifest file before you modify it. Il s’agit de la valeur de l' Executable attribut de l' Application élément.It's the value of the Executable attribute of the Application element.
applicationsapplications workingDirectoryworkingDirectory Facultatif Chemin d’accès relatif au package à utiliser comme répertoire de travail de l’application qui démarre.(Optional) A package-relative path to use as the working directory of the application that starts. 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.If you don't set this value, the operating system uses the System32 directory as the application's working directory.
processusprocesses executableexecutable Dans la plupart des cas, il s’agit du nom du executable configuré ci-dessus avec le chemin d’accès et l’extension de fichier supprimés.In most cases, this will be the name of the executable configured above with the path and file extension removed.
définitionsfixups dlldll Chemin d’accès relatif au package à la DLL de correction à charger.Package-relative path to the fixup DLL to load.
définitionsfixups configconfig Facultatif Contrôle le comportement de la DLL de correction.(Optional) Controls how the fixup DLL behaves. Le format exact de cette valeur varie en fonction de la correction, car chaque correction peut interpréter cet objet « BLOB » comme il le souhaite.The exact format of this value varies on a fixup-by-fixup basis as each fixup can interpret this "blob" as it wants.

Une fois que vous avez terminé, votre fichier ressemble à config.json ce qui suit.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" } ]
    }
  ]
}

Notes

Les applications processes clés, et fixups sont des tableaux.The applications, processes, and fixups keys are arrays. Cela signifie que vous pouvez utiliser le config.jssur un fichier pour spécifier plusieurs DLL d’application, de processus et de correction.That means that you can use the config.json file to specify more than one application, process, and fixup DLL.

Déboguer un correctif du RuntimeDebug a runtime fix

Dans Visual Studio, appuyez sur F5 pour démarrer le débogueur.In Visual Studio, press F5 to start the debugger. La première chose qui commence est l’application du lanceur de fibres discontinues, qui, à son tour, démarre votre application de bureau cible.The first thing that starts is the PSF Launcher application, which in turn, starts your target desktop application. Pour déboguer l’application de bureau cible, vous devez effectuer un attachement manuel au processus de l’application de bureau en choisissant Déboguer->attacher au processus , puis en sélectionnant le processus d’application.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. Pour autoriser le débogage d’une application .NET avec une DLL de correction du runtime natif, sélectionnez types de code managé et natif (débogage en mode mixte).To permit the debugging of a .NET application with a native runtime fix DLL, select managed and native code types (mixed mode debugging).

Vous pouvez définir des points d’arrêt en regard de lignes de code dans le code de l’application de bureau et le projet de correction du Runtime.You can set break points next to lines of code in the desktop application code and the runtime fix project. Si vous n’avez pas le code source pour votre application, vous pouvez définir des points d’arrêt uniquement en regard de lignes de code dans votre projet de correction du Runtime.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.