ImageOptimizer - Aggiornare un'estensione di Visual Studio in modo dettagliato
Questa guida illustra tutti i passaggi necessari per l'aggiunta del supporto di Visual Studio 2022 mantenendo il supporto di Visual Studio 2019 usando l'estensione Image Optimizer come case study.
Si tratta di una guida completa con i collegamenti ai commit di git per ogni passaggio, ma puoi visualizzare la pull request completata qui: https://github.com/madskristensen/ImageOptimizer/pull/46
.
Alla fine di questa guida sono disponibili anche esempi aggiuntivi.
Passaggio 1 - Modernizzare il progetto
Vedi Modernizzare il progetto.
Prima di tutto, il progetto VSIX e unit test viene spostato su .NET 4.7.2 nella pagina delle proprietà dei progetti:
Image Optimizer ha fatto riferimento ad alcuni vecchi pacchetti personalizzati 14.* e 15.*; invece, installeremo il pacchetto NuGet Microsoft.VisualStudio.Sdk
, che consolida tutti i riferimenti necessari.
- <ItemGroup>
- <PackageReference Include="Madskristensen.VisualStudio.SDK">
- <Version>14.0.0-beta4</Version>
- </PackageReference>
- <PackageReference Include="Microsoft.VSSDK.BuildTools">
- <Version>15.8.3247</Version>
- <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
- <PrivateAssets>all</PrivateAssets>
- </PackageReference>
- </ItemGroup>
+ <ItemGroup>
+ <PackageReference Include="Microsoft.VisualStudio.SDK">
+ <Version>16.9.31025.194</Version>
+ </PackageReference>
+ </ItemGroup>
La compilazione del progetto ha esito positivo e vengono visualizzati alcuni avvisi relativi al threading. Questi avvisi vengono corretti facendo clic su ctrl
e .
e usando intelliSense per aggiungere le righe di cambio di thread mancanti.
Passaggio 2: Eseguire il refactoring del codice sorgente in un progetto condiviso
Visualizza Progetti condivisi.
Per supportare Visual Studio 2022 è necessario aggiungere un nuovo progetto condiviso che conterrà il codice sorgente dell'estensione che verrà condiviso tra i progetti VSIX di Visual Studio 2019 e Visual Studio 2022.
Aggiungere un nuovo progetto condiviso alla soluzione
Aggiungere un riferimento al progetto condiviso al progetto VSIX.
Spostare i file di codice sorgente (cs, xaml, resx) nel nuovo progetto condiviso tranne per quanto segue:
source.extension.vsixmanifest
- File di metadati di estensione (icone, licenze, note sulla versione e così via)
- File VSCT
- File collegati
- Strumenti o librerie esterni che devono essere inclusi in VSIX
Ora, sposta tutti i metadati, i file VSCT, i file collegati e le librerie/strumenti esterni in un percorso condiviso e aggiungili nuovamente come elementi collegati al progetto VSIX. Non rimuovere
source.extension.vsixmanifest
.git commit 73ba920 - Spostamento di file
git commit d5e36b2 - Aggiunta di strumenti/librerie esterni
- Per questo progetto è necessario spostare l'icona dell'estensione, il file VSCT e gli strumenti esterni nella nuova cartella
ImageOptimizer\Resources
. Copiarli nella cartella condivisa e rimuoverli dal progetto VSIX. - Aggiunti di nuovo come elementi collegati e se gli elementi sono già elementi collegati possono rimanere così come sono (ad esempio, licenza).
- Verificare che l'azione di compilazione e altre proprietà siano impostate correttamente nei file collegati aggiunti selezionando ognuno e controllando la finestra degli strumenti delle proprietà. Per il progetto è stato necessario impostare quanto segue:
Impostare
icon.png
Azione di compilazione suContent
e includere in VSIX sutrue
Imposta
ImageOptimizer.vsct
come Azione di compilazione suVSCTComplile
e includi in VSIX sufalse
Impostare tutte le Azioni di Compilazione dei file in
Resources\Tools
suContent
e contrassegnare 'Includi nel VSIX' sutrue
Inoltre,
ImageOptimizer.cs
è una dipendenza diImageOptimizer.vsct
, per questo è necessario aggiungere manualmente questa dipendenza al file csproj:- <Content Include="..\SharedFiles\ImageOptimizer.vsct"> - <Link>ImageOptimizer.vsct</Link> - </Content> - <Compile Include="..\SharedFiles\ImageOptimizer.cs"> - <Link>ImageOptimizer.cs</Link> - </Compile> + <VSCTCompile Include="..\SharedFiles\ImageOptimizer.vsct"> + <ResourceName>Menus.ctmenu</ResourceName> + <Generator>VsctGenerator</Generator> + <LastGenOutput>..\SharedFiles\ImageOptimizer.cs</LastGenOutput> + </VSCTCompile> + <Compile Include="..\SharedFiles\ImageOptimizer.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>..\SharedFiles\ImageOptimizer.vsct</DependentUpon> + </Compile>
Se la finestra degli strumenti delle proprietà impedisce di impostare un'azione di compilazione specifica, è possibile modificare manualmente il file csproj come fatto in precedenza e impostare l'azione di compilazione in base alle esigenze.
- Per questo progetto è necessario spostare l'icona dell'estensione, il file VSCT e gli strumenti esterni nella nuova cartella
Compilare il progetto per convalidare le modifiche e correggere eventuali errori/problemi. Per informazioni sui problemi comuni, vedere la sezione domande frequenti.
Passaggio 3- Aggiungere un progetto VSIX di Visual Studio 2022
Fare riferimento a Aggiungere il target di Visual Studio 2022.
Aggiungere un nuovo progetto VSIX alla soluzione.
Rimuovere qualsiasi codice sorgente aggiuntivo nel nuovo progetto, ad eccezione di
source.extension.vsixmanifest.
Aggiungere un riferimento al progetto condiviso.
Aggiungere i file collegati dal progetto VSIX di Visual Studio 2019 e verificare che le proprietà "Azione di compilazione" e "Includi in VSIX" corrispondano. Copiare anche il file
source.extension.vsixmanifest
, che verrà modificato in un secondo momento per supportare Visual Studio 2022.Un tentativo di compilazione mostra che manca un riferimento a
System.Windows.Forms
. È sufficiente aggiungerlo al nostro progetto di Visual Studio 2022 e ricompilarlo.+ <Reference Include="System.Windows.Forms" />
Aggiorna i riferimenti ai pacchetti
Microsoft.VisualStudio.SDK
eMicrosoft.VSSDK.BuildTools
alle versioni Visual Studio 2022.Nota
Queste sono le versioni più recenti disponibili al momento della creazione di questa guida. È consigliabile ottenere le versioni più recenti disponibili.
-<PackageReference Include="Microsoft.VisualStudio.SDK" Version="16.0.206" /> +<PackageReference Include="Microsoft.VisualStudio.SDK" Version="17.0.0-preview-1-31216-1036" /> -<PackageReference Include="Microsoft.VSSDK.BuildTools" Version="16.10.32" /> +<PackageReference Include="Microsoft.VSSDK.BuildTools" Version="17.0.63-Visual Studio 2022-g3f11f5ab" />
Modificare il file
source.extension.vsixmanifest
in modo da riflettere la destinazione di Visual Studio 2022.Impostare il tag
<InstallationTarget>
per indicare Visual Studio 2022 e segnalare un payload amd64.<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)"> <ProductArchitecture>amd64</ProductArchitecture> </InstallationTarget>
Modificare il prerequisito per includere solo Visual Studio 2022 e versioni successive:
- <Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[15.0,)" DisplayName="Visual Studio core editor" /> + <Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[17.0,)" DisplayName="Visual Studio core editor" />
E abbiamo finito!
Con questo, la compilazione produce sia Visual Studio 2019 che Visual Studio 2022 VSIXes.
Altri esempi
-
ProPower Tools
- VisualizzaF1
- Consente di visualizzare in un Web browser informazioni sulla classe/oggetto selezionato.
- FixMixedTabs
- Scansiona i documenti e sostituisce le tabulazioni con spazi o viceversa
- VisualizzaF1
Passaggi successivi
Preparatevi ad aggiornare la vostra estensione leggendo questa guida completa.