Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Il consiglio di questo articolo può guidare gli sviluppatori nella migrazione delle estensioni che richiedono modifiche importanti per funzionare sia in Visual Studio 2019 che in Visual Studio 2022. In questi casi, è consigliabile avere due progetti VSIX e la compilazione condizionale.
Molte estensioni funzioneranno sia in Visual Studio 2019 che in Visual Studio 2022 con modifiche minori che non richiederanno di seguire i consigli sulla modernizzazione dell'estensione presenti in questo articolo. Provare l'estensione in Visual Studio 2022 e valutare qual è l'opzione migliore per l'estensione.
Visual Studio 2022 è un'applicazione a 64 bit e introduce alcune modifiche di rilievo in Visual Studio SDK. Questo articolo illustra i passaggi necessari per usare l'estensione con l'anteprima corrente di Visual Studio 2022. L'estensione può quindi essere pronta per l'installazione degli utenti prima che Visual Studio 2022 raggiunga la disponibilità generale.
Installare Visual Studio e compilare le estensioni
Installare Visual Studio 2022 da Visual Studio 2022 scarica.
Estensioni scritte in un linguaggio .NET
Visual Studio SDK destinato a Visual Studio 2022 per le estensioni gestite è esclusivamente in NuGet:
- Il metapacchetto Microsoft.VisualStudio.Sdk (versioni 17.x) include la maggior parte o tutti gli assembly di riferimento necessari.
- Il pacchetto pacchetto Microsoft.VSSDK.BuildTools (versioni 17.x) deve essere fatto riferimento dal progetto VSIX in modo che possa compilare un VSIX conforme a Visual Studio 2022.
Anche se non si fa riferimento a modifiche di rilievo, le estensioni devono essere compilate con la piattaforma Any CPU o x64. La piattaforma x86 non è compatibile con il processo a 64 bit in Visual Studio 2022.
Estensioni scritte in C++
Visual Studio SDK per le estensioni compilate con C++ è disponibile con Visual Studio SDK installato, come di consueto.
Anche se non si fa riferimento ad alcuna modifica di rilievo, le estensioni devono essere compilate specificamente contro il Visual Studio 2022 SDK e per AMD64.
Estensioni con codice in esecuzione
Le estensioni con codice in esecuzione devono essere compilate in modo specifico per Visual Studio 2022. Visual Studio 2022 non caricherà alcuna estensione destinata a una versione precedente di Visual Studio.
Informazioni su come eseguire la migrazione delle estensioni per le versioni precedenti di Visual Studio a Visual Studio 2022:
- Modernizzare i progetti.
- Effettua il refactoring del codice sorgente in un progetto condiviso per consentire la compatibilità con Visual Studio 2022 e versioni precedenti.
- Aggiungere un progetto VSIX mirato a Visual Studio 2022 e una tabella di rimappatura pacchetto/assembly .
- Apportare le modifiche del codice necessarie.
- Testare l'estensione di Visual Studio 2022.
- Pubblicare l'estensione di Visual Studio 2022.
Estensioni senza eseguire codice
Le estensioni che non contengono codice in esecuzione ,ad esempio modelli di progetto o di elementi, sono non necessarie per seguire i passaggi precedenti, inclusa la produzione di due VSIX distinti.
Modificare invece il vsix in modo che il relativo file source.extension.vsixmanifest
dichiari due destinazioni di installazione:
<Installation>
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[15.0,17.0)">
<ProductArchitecture>x86</ProductArchitecture>
</InstallationTarget>
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)">
<ProductArchitecture>amd64</ProductArchitecture>
</InstallationTarget>
</Installation>
È possibile ignorare i passaggi descritti in questo articolo sull'uso di progetti condivisi e più VSIX. È possibile procedere con il test di .
Nota
Stai creando una nuova estensione di Visual Studio usando Visual Studio 2022 e vuoi supportare anche Visual Studio 2019 o una versione precedente, consulta questa guida.
Attività di MSBuild
Se si creano attività MSBuild, tenere presente che in Visual Studio 2022 è probabile che vengano caricate in un processo di MSBuild.exe a 64 bit. Se l'attività richiede l'esecuzione di un processo a 32 bit, vedere Configurare le destinazioni e le attività per assicurarsi che MSBuild carichi l'attività in un processo a 32 bit.
Modernizzare il progetto VSIX
Prima di aggiungere il supporto di Visual Studio 2022 all'estensione, è consigliabile pulire e modernizzare il progetto esistente:
Eseguire la migrazione da packages.config a
PackageReference
.Sostituire eventuali riferimenti diretti agli assembly di Visual Studio SDK con elementi
PackageReference
:-<Reference Include="Microsoft.VisualStudio.OLE.Interop" /> +<PackageReference Include="Microsoft.VisualStudio.OLE.Interop" Version="..." />
Suggerimento
È possibile sostituire molti riferimenti all'assembly con solo un'istanza
PackageReference
per il metapacchetto:-<Reference Include="Microsoft.VisualStudio.OLE.Interop" /> -<Reference Include="Microsoft.VisualStudio.Interop" /> -<Reference Include="Microsoft.VisualStudio.Interop.8.0" /> +<PackageReference Include="Microsoft.VisualStudio.Sdk" Version="..." />
Assicurarsi di selezionare le versioni del pacchetto che corrispondono alla versione minima di Visual Studio di destinazione.
Alcuni assembly che non sono univoci per Visual Studio SDK (ad esempio, Newtonsoft.Json.dll) potrebbero essere stati individuabili tramite un semplice riferimento <Reference Include="Newtonsoft.Json" />
prima di Visual Studio 2022. Ma in Visual Studio 2022, richiedono invece un riferimento al pacchetto. Il motivo è che alcune directory di Visual Studio e SDK sono state rimosse dal percorso di ricerca di assembly predefinito in MSBuild.
Quando si passa da riferimenti di assembly diretti ai riferimenti al pacchetto NuGet, è possibile selezionare riferimenti ad assembly aggiuntivi e pacchetti analizzatori perché NuGet installa automaticamente la chiusura transitiva delle dipendenze. Questa operazione è in genere ok, ma potrebbe comportare avvisi aggiuntivi durante la compilazione. Esamina questi avvisi e risolvi il maggior numero possibile. Prendere in considerazione l'uso di aree di #pragma warning disable <id>
nel codice per eliminare gli avvisi che non è possibile risolvere.
Usare progetti condivisi per il multitargeting
I progetti condivisi sono un tipo di progetto introdotto in Visual Studio 2015. I progetti condivisi in Visual Studio consentono la condivisione di file di codice sorgente tra più progetti e la compilazione in modo diverso usando simboli di compilazione condizionale e set univoci di riferimenti.
Visual Studio 2022 richiede un set distinto di assembly di riferimento di tutte le versioni precedenti di Visual Studio. È quindi consigliabile usare progetti condivisi per mirare comodamente la tua estensione a Visual Studio 2022 e alle versioni precedenti e successive. Questa tecnica ti darà la condivisione del codice ma riferimenti distinti.
Nel contesto delle estensioni di Visual Studio, è possibile avere un progetto VSIX per Visual Studio 2022 e versioni successive e un progetto VSIX per Visual Studio 2019 e versioni precedenti. Ognuno di questi progetti conterrà solo un'istanza di source.extension.vsixmanifest
e i riferimenti al pacchetto all'SDK 16.x o 17.x. Questi progetti VSIX avrebbero anche un riferimento condiviso a un nuovo progetto che ospiterà tutto il codice sorgente condivisibile tra le due versioni di Visual Studio.
Questa sezione presuppone che sia già disponibile un progetto VSIX destinato a Visual Studio 2019 e che si vuole che l'estensione funzioni in Visual Studio 2022.
È possibile completare tutti questi passaggi usando Visual Studio 2019:
Se non è già stato fatto, per modernizzare i progetti e per semplificare i passaggi più avanti in questo processo di aggiornamento.
Aggiungere un nuovo progetto condiviso alla soluzione per ogni progetto esistente che fa riferimento a Visual Studio SDK. Fare clic con il pulsante destro del mouse sulla soluzione e quindi selezionare Aggiungi>Nuovo progetto.
Nella finestra di dialogo Aggiungi un nuovo progetto cercare progetto condivisoe quindi selezionare il modello progetto condiviso.
Aggiungi un riferimento da ciascun progetto che fa riferimento al Visual Studio SDK alla sua controparte di progetto condiviso.
Spostare tutto il codice sorgente (inclusi i file .cs e .resx) da ciascun progetto che fa riferimento all'SDK di Visual Studio alla sua controparte del progetto condiviso. Lasciare file source.extension.vsixmanifest nel progetto VSIX.
Spostare i file di metadati (ad esempio, note sulla versione, licenza e icone) e i file VSCT in una directory condivisa. Aggiungerli quindi come file collegati al progetto VSIX. Si noti che la directory condivisa è separata dal progetto condiviso.
Per i file di metadati, impostare Azione di Compilazione su Contenuto. Impostare Includi in VSIX su True.
Per i file VSCT, impostare Azione di compilazione su VSCTCompile. Impostare Includi in VSIX su Falso.
Se Visual Studio segnala che questa impostazione non è supportata, è possibile modificare manualmente l'azione di compilazione scaricando il progetto e modificando
Content
inVSCTCompile
:-<Content Include="..\SharedFiles\VSIXProject1Package.vsct"> - <Link>VSIXProject1Package.vsct</Link> -</Content> +<VSCTCompile Include="..\SharedFiles\VSIXProject1Package.vsct"> + <Link>VSIXProject1Package.vsct</Link> + <ResourceName>Menus.ctmenu</ResourceName> +</VSCTCompile>
Compilare il progetto per verificare che non siano stati introdotti errori.
Il progetto è ora pronto per aggiungere il supporto di Visual Studio 2022.
Aggiungere un target di Visual Studio 2022
Questa sezione presuppone che siano stati completati i passaggi per fattore dell'estensione di Visual Studio con progetti condivisi.
Aggiungere il supporto di Visual Studio 2022 all'estensione seguendo questa procedura. È possibile completarli usando Visual Studio 2019.
Aggiungere un nuovo progetto VSIX alla soluzione. Questo progetto sarà destinato a Visual Studio 2022. Rimuovere qualsiasi codice sorgente fornito con il modello, ma mantenere il file source.extension.vsixmanifest.
Nel tuo nuovo progetto VSIX, aggiungi un riferimento allo stesso progetto condiviso a cui fanno riferimento le estensioni VSIX destinate a Visual Studio 2019.
Verificare che il nuovo progetto VSIX venga compilato correttamente. Potrebbe essere necessario aggiungere riferimenti in modo che corrispondano al progetto VSIX originale per risolvere eventuali errori del compilatore.
Per le estensioni di Visual Studio gestite, aggiornare i riferimenti al pacchetto dalla versione 16.x (o precedente) alle versioni del pacchetto 17.x nel file di progetto di destinazione di Visual Studio 2022. Usare Gestione pacchetti NuGet o modificare direttamente il file di progetto:
-<PackageReference Include="Microsoft.VisualStudio.SDK" Version="16.0.206" /> +<PackageReference Include="Microsoft.VisualStudio.SDK" Version="17.0" /> -<PackageReference Include="Microsoft.VSSDK.BuildTools" Version="16.10.32" /> +<PackageReference Include="Microsoft.VSSDK.BuildTools" Version="17.0" />
Le versioni mostrate nel codice precedente sono solo per la dimostrazione. Nel tuo codice, usa le versioni disponibili nel sito Web NuGet .
In molti casi, gli ID pacchetto sono stati modificati. Per un elenco delle modifiche in Visual Studio 2022, vedere la tabella di mapping di pacchetti/assembly .
Le estensioni scritte in C++ non hanno ancora un SDK disponibile per la compilazione.
Per i progetti C++, le estensioni devono essere compilate per AMD64. Per le estensioni gestite, è consigliabile modificare il progetto dalla compilazione per CPU Any a x64. Questa modifica garantisce che in Visual Studio 2022 l'estensione viene sempre caricata in un processo a 64 bit. anche qualsiasi CPU, ma potrebbe generare avvisi se si fa riferimento a file binari nativi x64.
Qualsiasi dipendenza che l'estensione potrebbe avere in un modulo nativo dovrà essere aggiornata da un'immagine x86 a un'immagine AMD64.
Modificare il file di source.extension.vsixmanifest per orientarsi verso Visual Studio 2022. Impostare il tag
<InstallationTarget>
per indicare Visual Studio 2022. Impostare l'elementoProductArchitecture
per indicare un payload AMD64.<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)"> <ProductArchitecture>amd64</ProductArchitecture> </InstallationTarget>
Importante
In Visual Studio 2019 la finestra di progettazione per questo file non espone il nuovo elemento
ProductArchitecture
. Per apportare questa modifica, è necessario usare un editor XML. Per accedere all'editor XML, passare a Esplora soluzioni e selezionare il comando Apri con.L'elemento
ProductArchitecture
è fondamentale. Visual Studio 2022 non installerà l'estensione senza di essa.Elemento Valore Descrizione ProductArchitecture
x86
,amd64
Piattaforme supportate da questo VSIX. Senza distinzione tra maiuscole e minuscole. Usare una piattaforma per elemento e un elemento per ogni istanza di InstallationTarget
. Per le versioni del prodotto inferiori a 17.0, il valore predefinito èx86
e può essere omesso. Per le versioni del prodotto 17.0 e successive, questo elemento è obbligatorio e non esiste alcun valore predefinito. Per Visual Studio 2022, l'unico contenuto valido per questo elemento èamd64
.Apportare eventuali altre modifiche necessarie in source.extension.vsixmanifest in modo che corrisponda a quello destinato a Visual Studio 2019 (se presente).
Se si pubblicano due versioni dell'estensione destinate a una versione diversa di Visual Studio, assicurarsi che l'ID del VSIX nell'elemento
Identity
del manifesto sia diverso per ogni estensione.
A questo punto, si dispone di un'estensione VSIX mirata per Visual Studio 2022. È consigliabile compilare il progetto VSIX di Visual Studio 2022 e risolvere eventuali interruzioni di compilazione che si presentano. Congratulazioni se nel progetto VSIX mirato a Visual Studio 2022 non hai interruzioni di compilazione. Si è pronti per i test.
Gestire le modifiche che causano un'interruzione dell'API
Le modifiche che causano un'interruzione dell'API potrebbero richiedere aggiornamenti al codice eseguito nelle versioni precedenti di Visual Studio. Per suggerimenti su come aggiornare il codice, vedere Modifiche significative dell'API in Visual Studio 2022.
Quando adatti il tuo codice, ti consigliamo di usare la compilazione condizionale. Il codice può quindi continuare a supportare le versioni precedenti di Visual Studio durante l'aggiunta del supporto per Visual Studio 2022.
Quando hai completato la creazione dell'estensione destinata a Visual Studio 2022, passa al test.
Usare i simboli di compilazione condizionale
Se si vuole usare lo stesso codice sorgente, anche lo stesso file, per Visual Studio 2022 e versioni precedenti, potrebbe essere necessario usare la compilazione condizionale. È quindi possibile creare una copia tramite fork del codice per adattarsi alle modifiche significative. La compilazione condizionale è una funzionalità dei linguaggi C#, Visual Basic e C++. Può essere usato per condividere la maggior parte del codice, pur ospitando API divergenti in posizioni specifiche.
Per altre informazioni sull'uso delle direttive del preprocessore e dei simboli di compilazione condizionale, vedere direttive del preprocessore C#.
I progetti destinati alle versioni precedenti di Visual Studio avranno bisogno di un simbolo di compilazione condizionale. Questo simbolo può quindi essere usato per creare una copia tramite fork del codice per usare le diverse API. È possibile impostare il simbolo di compilazione condizionale nella pagina delle proprietà del progetto:
Assicurarsi di impostare il simbolo di compilazione per Tutte le configurazioni. Per impostazione predefinita, il simbolo immesso può essere applicato a una sola configurazione.
Tecniche C#
È possibile usare il simbolo di compilazione come direttiva del preprocessore (#if
), come illustrato nel codice seguente. È quindi possibile creare una copia tramite fork del codice per gestire una modifica che causa un'interruzione tra le versioni di Visual Studio.
Guid myGuid = new Guid("{633FBA02-719B-40E7-96BF-0899767CD104}");
uint myFlags = 0;
IVsShell shell = await AsyncServiceProvider.GlobalProvider.GetServiceAsync<SVsShell, IVsShell>();
#if Dev16
shell.LoadUILibrary(myGuid, myFlags, out uint ptrLib);
#else
shell.LoadUILibrary(myGuid, myFlags, out IntPtr ptrLib);
#endif
In alcuni casi, è possibile usare var
per evitare di denominare il tipo ed evitare la necessità di regioni #if
. Il frammento di codice precedente può anche essere scritto come segue:
Guid myGuid = new Guid("{633FBA02-719B-40E7-96BF-0899767CD104}");
uint myFlags = 0;
IVsShell shell = await AsyncServiceProvider.GlobalProvider.GetServiceAsync<SVsShell, IVsShell>();
shell.LoadUILibrary(myGuid, myFlags, out var ptrLib);
Quando si usa la sintassi #if
, si noti come usare l'elenco a discesa per il contesto del servizio di linguaggio per modificare l'evidenziazione della sintassi. L'altro elenco a discesa consente al servizio linguistico di concentrare l'attenzione su una versione di Visual Studio di destinazione per questa estensione rispetto a un'altra.
Tecniche di condivisione XAML
XAML non dispone di un preprocessore per consentire la personalizzazione del contenuto in base ai simboli del preprocessore. Potrebbe essere necessario copiare e gestire due pagine XAML il cui contenuto differisce tra Visual Studio 2022 e versioni precedenti.
In alcuni casi, un riferimento a un tipo presente in assembly distinti in Visual Studio 2022 e versioni precedenti potrebbe essere ancora rappresentabile in un file XAML. Rimuovere il namespace che fa riferimento all'assembly:
-xmlns:vsui="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.14.0"
-Value="{DynamicResource {x:Static vsui:TreeViewColors.SelectedItemActiveBrushKey}}"
+Value="{DynamicResource TreeViewColors.SelectedItemActiveBrushKey}"
Testare l'estensione
Per testare un'estensione destinata a Visual Studio 2022, è necessario che Visual Studio 2022 sia installato. Non sarà possibile eseguire estensioni a 64 bit nelle versioni precedenti di Visual Studio.
È possibile usare Visual Studio 2022 per compilare e testare le estensioni se sono destinate a Visual Studio 2022 o a una versione precedente. Quando si apre un progetto VSIX da Visual Studio 2022, viene aperta un'istanza sperimentale di Visual Studio.
Consigliamo vivamente di testare con ogni versione di Visual Studio che si desidera supportare con l'estensione.
Pubblicare l'estensione
Hai aggiunto un target di Visual Studio 2022 al tuo componente aggiuntivo e l'hai testato. A questo momento si è pronti per pubblicare l'estensione per il mondo da ammirare.
Visual Studio Marketplace
La pubblicazione dell'estensione per Visual Studio Marketplace è un ottimo modo per consentire ai nuovi utenti di trovare e installare l'estensione. Indipendentemente dal fatto che l'estensione sia destinata esclusivamente a Visual Studio 2022 o che sia destinata anche alle versioni precedenti di Visual Studio, il Marketplace è disponibile per supportare l'utente.
In futuro, Marketplace consentirà di caricare più VSIX in una sola presentazione del Marketplace. È quindi possibile caricare un VSIX destinato a Visual Studio 2022 e un VSIX per una versione precedente di Visual Studio. Gli utenti otterranno automaticamente il VSIX corretto per la versione di Visual Studio installata, quando usano gestione estensioni di Visual Studio.
Programma di installazione personalizzato
Se si compila un file MSI o EXE per installare l'estensione e si avvia vsixinstaller.exe
per installare (parte dell'estensione), tieni presente che il programma di installazione VSIX in Visual Studio 2022 è stato aggiornato. Gli sviluppatori devono usare la versione del programma di installazione VSIX fornito con Visual Studio 2022 per installare le estensioni in tale versione di Visual Studio.
Il programma di installazione VSIX in Visual Studio 2022 installa anche le estensioni applicabili destinate alle versioni precedenti di Visual Studio esistenti con Visual Studio 2022 nello stesso computer.
Condivisione di rete
È possibile condividere l'estensione su una LAN o in qualsiasi altro modo. Se punti a Visual Studio 2022 e versioni precedenti, dovrai condividere i tuoi VSIX multipli singolarmente. Assegnare loro nomi di file (o inserirli in cartelle univoche) che consentono agli utenti di sapere quale VSIX installare in base alla versione di Visual Studio installata.
Dipendenze
Se VSIX specifica altri VSIX come dipendenze tramite l'elemento <dependency>
, ogni VSIX a cui si fa riferimento deve essere installato nelle stesse destinazioni e architetture di prodotto del VSIX. Se un VSIX dipendente non supporta l'installazione di destinazione di Visual Studio, il VSIX avrà esito negativo.
È possibile che il VSIX dipendente supporti più destinazioni e architetture rispetto a quelle dell'utente, non solo meno. Questa restrizione significa che l'approccio di distribuzione e implementazione di un VSIX con dipendenze deve rispecchiare quello delle sue dipendenze.
Q & A
Q: l'estensione non richiede alcuna modifica di interoperabilità perché fornisce solo i dati (ad esempio, i modelli). È possibile creare una singola estensione che includa anche Visual Studio 2022?
A: Sì! Per informazioni su questo argomento, vedi le estensioni senza eseguire codice.
Q: una dipendenza NuGet genera assembly di interoperabilità precedenti e causa classi in conflitto. Cosa dovrei fare?
A: Aggiungi la seguente riga al file .csproj per evitare assembly duplicati:
<PackageReference Include="<Name of offending assembly>" ExcludeAssets="compile" PrivateAssets="all" />
Questo codice impedirà ai riferimenti al pacchetto di importare la versione precedente dell'assembly da altre dipendenze.
Q: i comandi e i tasti di scelta rapida hanno smesso di funzionare in Visual Studio dopo aver spostato i file di origine in un progetto condiviso. Cosa dovrei fare?
A: Passaggio 2.4 dell'esempio di Image Optimizer illustra come aggiungere file VSCT come elementi collegati in modo che vengano compilati nel file VSCT.
Contenuto correlato
Seguire un esempio dettagliato, ImageOptimizer, con collegamenti al progetto e modifiche al codice per ogni passaggio.