Applicare il Package Support Framework in Visual Studio
Package Support Framework (PSF) è un progetto di open source che consente di applicare correzioni all'applicazione desktop esistente. Il PSF consente a un'applicazione di eseguire in un formato in pacchetto senza modificare il codice. PSF consente di seguire le procedure consigliate degli ambienti di runtime moderni per le app.
Nelle sezioni seguenti verrà illustrato come creare un nuovo progetto di Visual Studio, includere Package Support Framework nella soluzione e creare correzioni di runtime.
Passaggio 1: Creare una soluzione pacchetto in Visual Studio
In Visual Studio creare una nuova soluzione Di Visual Studio, soluzione vuota. Includere tutti i progetti dell'applicazione alla soluzione vuota appena creata.
Passaggio 2: Aggiungere un progetto di creazione di pacchetti
Se non si dispone già di un progetto di creazione pacchetti applicazioni di Windows, crearne uno e aggiungerlo alla soluzione. Creare un nuovo progetto Visual C# - Windows Universal ->> Windows Application Packaging Project e aggiungerlo alla soluzione appena creata.
Per altre informazioni sul progetto Di creazione pacchetti di applicazioni di Windows, vedere Creare un pacchetto dell'applicazione usando Visual Studio.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto di creazione pacchetti, selezionare Modifica file di progetto e quindi aggiungerlo nella parte inferiore del file di progetto:
...
<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>
Passaggio 3: Aggiungere un progetto per la correzione del runtime
Aggiungere un nuovo progetto Visual C++ - Windows Desktop ->> libreria di Dynamic-Link (DLL) alla soluzione.
Fare quindi clic con il pulsante destro del mouse sul progetto e scegliere Proprietà.
Nella pagina delle proprietà individuare il campo Configuration Properties - C/C++ - Language ->> C++ Language> - C++ Language Standard. Selezionare quindi ISO C++17 Standard (/std:c++17) dal menu a discesa.
Fare clic con il pulsante destro del mouse sul progetto e scegliere l'opzione Gestisci pacchetti Nuget nel menu di scelta rapida. Assicurarsi che l'opzione origine pacchetto sia impostata su All o nuget.org.
Fare clic sull'icona delle impostazioni accanto a tale campo.
Cercare i pacchetti Nuget per PSF, quindi installare Microsoft.PackageSupportFramework per questo progetto.
Passaggio 4: Aggiungere un progetto che avvia l'eseguibile del launcher PSF
Aggiungere un nuovo oggetto Visual C++ - Generale ->> Progetto vuoto alla soluzione.
Eseguire i passaggi seguenti:
- Fare clic con il pulsante destro del mouse sul progetto e scegliere l'opzione Gestisci pacchetti Nuget nel menu di scelta rapida. Assicurarsi che l'opzione origine pacchetto sia impostata su All o nuget.org.
- Fare clic sull'icona delle impostazioni accanto a tale campo.
- Cercare i pacchetti Nuget per PSF, quindi installare Microsoft.PackageSupportFramework per questo progetto.
Aprire le pagine delle proprietà per il progetto e nella pagina Impostazioni generali impostare la proprietà Nome di destinazione su PSFLauncher32
o PSFLauncher64
a seconda dell'architettura dell'applicazione.
Aggiungere un riferimento al progetto di correzione del runtime nella soluzione.
Fare clic con il pulsante destro del mouse sul riferimento e quindi nella finestra Proprietà applicare questi valori.
Proprietà | Valore |
---|---|
Copiare localmente | True |
Copia assembly satellite locale | True |
Output assembly di riferimento | True |
Collega dipendenze di libreria | False |
Input di dipendenza della libreria di collegamenti | False |
Passaggio 5: Configurare il progetto di creazione del pacchetto
Per configurare il progetto di creazione del pacchetto, seguire questa procedura:
- Nel progetto di creazione pacchetti fare clic con il pulsante destro del mouse sulla cartella Applicazioni e scegliere Aggiungi riferimento dal menu a discesa.
- Scegliere il progetto launcher PSF e il progetto dell'applicazione desktop e quindi scegliere il pulsante OK .
- Selezionare sia il programma di avvio PSF che il progetto Applicazione desktop , quindi fare clic sul pulsante Ok. Se il codice sorgente dell'applicazione non è disponibile, selezionare solo il progetto launcher PSF.
- Nel nodo Applicazioni fare clic con il pulsante destro del mouse sull'applicazione PSF Launcher e scegliere Imposta come punto di ingresso.
Aggiungere un file denominato config.json
al progetto di creazione pacchetti, quindi copiare e incollare il testo json seguente nel file. Impostare la proprietà Azione pacchetto su Contenuto.
{
"applications": [
{
"id": "",
"executable": "",
"workingDirectory": ""
}
],
"processes": [
{
"executable": "",
"fixups": [
{
"dll": "",
"config": {
}
}
]
}
]
}
Specificare un valore per ogni chiave. Usare questa tabella come riferimento.
Array | Key | Valore |
---|---|---|
scala Web | id | Utilizzare il valore dell'attributo dell'elemento Id Application nel manifesto del pacchetto. |
scala Web | eseguibile | Percorso relativo del pacchetto al file eseguibile che si vuole avviare. Nella maggior parte dei casi, è possibile ottenere questo valore dal file manifesto del pacchetto prima di modificarlo. È il valore dell'attributo dell'elemento Executable Application . |
scala Web | Workingdirectory | (Facoltativo) Percorso relativo al pacchetto da usare come directory di lavoro dell'applicazione che inizia. Se non si imposta questo valore, il sistema operativo usa la System32 directory come directory di lavoro dell'applicazione. |
processes | eseguibile | Nella maggior parte dei casi, questo sarà il nome dell'oggetto configurato in precedenza con il percorso e l'estensione executable del file rimossa. |
correzioni | Libreria dll | Percorso relativo del pacchetto alla DLL di correzione da caricare. |
correzioni | config | (Facoltativo) Controlla il comportamento della DLL di correzione. Il formato esatto di questo valore varia in base a una correzione per correzione perché ogni correzione può interpretare questo "BLOB" come vuole. |
Al termine, il config.json
file avrà un aspetto simile al seguente.
{
"applications": [
{
"id": "DesktopApplication",
"executable": "DesktopApplication/WinFormsDesktopApplication.exe",
"workingDirectory": "WinFormsDesktopApplication"
}
],
"processes": [
{
"executable": ".*App.*",
"fixups": [ { "dll": "RuntimeFix.dll" } ]
}
]
}
Nota
Le applications
chiavi , processes
e fixups
sono matrici. Ciò significa che è possibile usare il file config.json per specificare più di un'applicazione, un processo e una DLL di correzione.
Eseguire il debug di una correzione del runtime
In Visual Studio premere F5 per avviare il debugger. La prima cosa che inizia è l'applicazione PSF Launcher, che a sua volta avvia l'applicazione desktop di destinazione. Per eseguire il debug dell'applicazione desktop di destinazione, è necessario collegare manualmente al processo dell'applicazione desktop scegliendo Debug-Attach> to Process e quindi selezionando il processo dell'applicazione. Per consentire il debug di un'applicazione .NET con una DLL di correzione del runtime nativo, selezionare tipi di codice gestiti e nativi (debug in modalità mista).
È possibile impostare punti di interruzione accanto a righe di codice nel codice dell'applicazione desktop e nel progetto di correzione del runtime. Se non si dispone del codice sorgente per l'applicazione, sarà possibile impostare i punti di interruzione solo accanto a righe di codice nel progetto di correzione del runtime.