Applicare il Package Support Framework in Visual StudioApply Package Support Framework in Visual Studio

Package support Framework (FPF) è un progetto open source che consente di applicare correzioni all'applicazione desktop esistente.The Package Support Framework (PSF) is an open source project that enables you to apply fixes to your existing desktop application. PSF consente l'esecuzione di un'applicazione in un formato con pacchetto MSIX senza modificare il codice.The PSF enables an application to run in an MSIX packaged format without modifying code. PSF consente di seguire le procedure consigliate degli ambienti di runtime moderni per le app.The Package Support Framework helps your application follow the best practices of the modern runtime environment.

Nelle sezioni seguenti viene illustrato come creare un nuovo progetto di Visual Studio, includere il Framework di supporto dei pacchetti per la soluzione e creare correzioni di 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.

Passaggio 1: creare una soluzione di pacchetto in Visual StudioStep 1: Create a package solution in Visual Studio

In Visual Studio creare una nuova soluzione di Visual Studio, ovvero una soluzione vuota.In Visual Studio, create a new Visual Studio Solutions, Blank Solution. Includere tutti i progetti dell'applicazione nella soluzione vuotaappena creata.Include any application projects to the newly created Blank Solution.

Passaggio 2: aggiungere un progetto di creazione pacchettoStep 2: Add a packaging project

Se non si dispone già di un progetto di creazione pacchetti di applicazioni Windows, crearne uno e aggiungerlo alla soluzione.If you don't already have a Windows Application Packaging Project, create one and add it to your solution. Creare un nuovo progetto di creazione di pacchetti di applicazioni Windows universale > > di Visual C# e aggiungerlo alla soluzione appena creata.Create a new Visual C# -> Windows Universal -> Windows Application Packaging Project and add it to your newly created solution.

Per altre informazioni sul progetto di creazione pacchetti di applicazioni Windows, vedere creare un pacchetto dell'applicazione con Visual Studio.For more information on Windows Application Packaging project, see Package your application by using Visual Studio.

In Esplora soluzionifare clic con il pulsante destro del mouse sul progetto di creazione pacchetto, scegliere modificae quindi aggiungere il file alla fine del file di progetto:In Solution Explorer, right-click the packaging project, select Edit, 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>

Passaggio 3: aggiungere il progetto per la correzione del runtimeStep 3: Add project for the runtime fix

Aggiungere alla soluzione un nuovo progetto di libreria a collegamento dinamico Visual C++ > desktop di Windows > (dll) .Add a new Visual C++ -> Windows Desktop -> Dynamic-Link Library (DLL) project to the solution.

Fare quindi clic con il pulsante destro del mouse sul progetto, quindi scegliere Proprietà.Next, right-click the that project, and then choose Properties.

Nella pagina delle proprietà individuare il campo proprietà di configurazione-> C/C++-> linguaggio-> linguaggio C++ standard .In the property page, locate the Configuration Properties -> C/C++ -> Language -> C++ Language Standard field. Quindi selezionare ISO C++ 17 standard (/STD: c++ 17) dal menu a discesa.Then select ISO C++17 Standard (/std:c++17) from the drop-down menu.

Fare clic con il pulsante destro del mouse sul progetto, quindi scegliere l'opzione Gestisci pacchetti NuGet dal menu di scelta rapida.Right-click on the project, and then in the context menu, choose the Manage Nuget Packages option. Verificare che l'opzione origine pacchetto sia impostata su tutti o NuGet.org.Ensure that the Package source option is set to All or nuget.org.

Fare clic sull'icona delle impostazioni accanto a tale campo.Click the settings icon next that field.

Eseguire una ricerca nei pacchetti NuGet per PSF, quindi installare Microsoft. PackageSupportFramework per questo progetto.Search the Nuget packages for PSF, then install the Microsoft.PackageSupportFramework for this project.

pacchetto nuget

Passaggio 4: aggiungere un progetto che avvia l'eseguibile dell'utilità di avvio PSFStep 4: Add a project that starts the PSF Launcher executable

Aggiungere un nuovo progetto Visual C++-> generale-> vuoto alla soluzione.Add a new Visual C++ -> General -> Empty Project to the solution.

Eseguire i passaggi seguenti:Do the following steps:

  1. Fare clic con il pulsante destro del mouse sul progetto, quindi scegliere l'opzione Gestisci pacchetti NuGet dal menu di scelta rapida.Right-click that project, and then in the context menu, choose the Manage Nuget Packages option. Verificare che l'opzione origine pacchetto sia impostata su tutti o NuGet.org.Ensure that the Package source option is set to All or nuget.org.
  2. Fare clic sull'icona delle impostazioni accanto a tale campo.Click the settings icon next that field.
  3. Eseguire una ricerca nei pacchetti NuGet per PSF, quindi installare Microsoft. PackageSupportFramework per questo progetto.Search the Nuget packages for PSF, then install the Microsoft.PackageSupportFramework for this project.

Aprire le pagine delle proprietà per il progetto e, nella pagina impostazioni generali , impostare la proprietà Nome destinazione su PSFLauncher32 o a PSFLauncher64 seconda dell'architettura dell'applicazione.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.

Aggiungere un riferimento al progetto per la correzione del runtime nella soluzione.Add a project reference to the runtime fix project in your solution.

Fare clic con il pulsante destro del mouse sul riferimento, quindi nella finestra Proprietà applicare questi valori.Right-click the reference, and then in the Properties window, apply these values.

ProprietàProperty ValueValue
Copia localmenteCopy local True True
Copia assembly satellite localeCopy Local Satellite Assemblies True True
Output assembly di riferimentoReference Assembly Output True True
Collega dipendenze di libreriaLink Library Dependencies FalseFalse
Input delle dipendenze della libreria di collegamentoLink Library Dependency Inputs FalseFalse

Passaggio 5: configurare il progetto di creazione pacchettiStep 5: Configure the packaging project

Per configurare il progetto di creazione pacchetti, seguire questa procedura:To configure the packaging project do the following steps:

  1. Nel progetto di creazione pacchetto, fare clic con il pulsante destro del mouse sulla cartella applicazioni , quindi scegliere Aggiungi riferimento dal menu a discesa.In the packaging project, right-click the Applications folder, and then choose Add Reference from the dropdown menu.
  2. Scegliere il progetto di avvio PSF e il progetto di applicazione desktop, quindi scegliere il pulsante OK .Choose the PSF Launcher project and your desktop application project, and then choose the OK button.
  3. Selezionare l' utilità di avvio di PSF e il progetto di applicazione desktop , quindi fare clic sul pulsante OK.Select both the PSF Launcher and the Desktop Application project, then click the Ok button. Se il codice sorgente dell'applicazione non è disponibile, selezionare solo il progetto di avvio PSF.If the application source code is not available, select only the PSF Launcher project.
  4. Nel nodo applicazioni fare clic con il pulsante destro del mouse sull'applicazione di avvio PSF, quindi scegliere Imposta come punto di ingresso.In the Applications node, right-click the PSF Launcher application, and then choose Set as Entry Point.

Aggiungere un file denominato config.json al progetto di creazione pacchetto, quindi copiare e incollare il testo JSON seguente nel file.Add a file named config.json to your packaging project, then, copy and paste the following json text into the file. Impostare la proprietà Azione pacchetto su contenuto.Set the Package Action property to Content.

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

Specificare un valore per ogni chiave.Provide a value for each key. Usare questa tabella come riferimento.Use this table as a guide.

ArrayArray chiavekey ValueValue
scala Webapplications IDid Usare il valore dell' Id attributo dell' Application elemento nel manifesto del pacchetto.Use the value of the Id attribute of the Application element in the package manifest.
scala Webapplications eseguibileexecutable Percorso relativo del pacchetto all'eseguibile che si desidera avviare.The package-relative path to the executable that you want to start. Nella maggior parte dei casi, è possibile ottenere questo valore dal file manifesto del pacchetto prima di modificarlo.In most cases, you can get this value from your package manifest file before you modify it. Si tratta del valore dell' Executable attributo dell' Application elemento.It's the value of the Executable attribute of the Application element.
scala Webapplications workingDirectoryworkingDirectory Opzionale Percorso relativo del pacchetto da utilizzare come directory di lavoro dell'applicazione che viene avviata.(Optional) A package-relative path to use as the working directory of the application that starts. Se non si imposta questo valore, il sistema operativo usa la System32 Directory come directory di lavoro dell'applicazione.If you don't set this value, the operating system uses the System32 directory as the application's working directory.
processiprocesses eseguibileexecutable Nella maggior parte dei casi, questo sarà il nome dell'oggetto executable configurato sopra con il percorso e l'estensione del file rimossi.In most cases, this will be the name of the executable configured above with the path and file extension removed.
correzionifixups Libreria dlldll Percorso relativo del pacchetto per la DLL di correzione da caricare.Package-relative path to the fixup DLL to load.
correzionifixups configconfig Opzionale Controlla il comportamento della DLL di correzione.(Optional) Controls how the fixup DLL behaves. Il formato esatto di questo valore varia in base a una correzione per correzione, perché ogni correzione può interpretare questo "blob" come desiderato.The exact format of this value varies on a fixup-by-fixup basis as each fixup can interpret this "blob" as it wants.

Al termine, l'aspetto del config.json file sarà simile al seguente.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" } ]
    }
  ]
}

Nota

Le applications processes chiavi, e fixups sono matrici.The applications, processes, and fixups keys are arrays. Ciò significa che è possibile usare il file config. JSON per specificare più di un'applicazione, un processo e una DLL di correzione.That means that you can use the config.json file to specify more than one application, process, and fixup DLL.

Debug di una correzione di runtimeDebug a runtime fix

In Visual Studio premere F5 per avviare il debugger.In Visual Studio, press F5 to start the debugger. Il primo elemento che inizia è l'applicazione di avvio PSF, che a sua volta avvia l'applicazione desktop di destinazione.The first thing that starts is the PSF Launcher application, which in turn, starts your target desktop application. Per eseguire il debug dell'applicazione desktop di destinazione, è necessario connettersi manualmente al processo dell'applicazione desktop scegliendo debug->Connetti a processoe quindi selezionando il processo dell'applicazione.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. Per consentire il debug di un'applicazione .NET con una DLL di correzione del runtime nativa, selezionare i tipi di codice gestito e nativo (debug in modalità mista).To permit the debugging of a .NET application with a native runtime fix DLL, select managed and native code types (mixed mode debugging).

È possibile impostare punti di rottura accanto alle righe di codice nel codice dell'applicazione desktop e nel progetto di correzione del runtime.You can set break points next to lines of code in the desktop application code and the runtime fix project. Se non si dispone del codice sorgente per l'applicazione, sarà possibile impostare i punti di rottura solo accanto alle righe di codice nel progetto di correzione del 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.