Usare progetti VSIX

I progetti VSIX sono il modo standard per creare pacchetti Visual Studio estensioni per la distribuzione. Indipendentemente dal fatto che si stia creando un'estensione VisualStudio.Extensibility o un'estensione basata su VSSDK, l'output è un .vsix file installato dagli utenti tramite Gestione estensioni o Visual Studio Marketplace.

Important

Questo articolo illustra i modelli di progetto VSIX meno recenti e la gestione di progetti di creazione pacchetti esistenti. Per i nuovi progetti in Visual Studio 18.11 o versione successiva, usare il modello di Project VSIX moderno, che gestisce la creazione di pacchetti VSIX. Si tratta di flussi di lavoro alternativi del progetto, non di passaggi consecutivi. Scegliere in base all'ambiente di sviluppo e al progetto esistente, non solo alla versione Visual Studio di destinazione dell'estensione.

Creare un progetto VSIX

I modelli di progetto VSIX sono disponibili nella finestra di dialogo Crea un nuovo progetto . Cercare "VSIX" per trovarli:

  • Estensione VisualStudio.Extensibility : per le estensioni out-of-process che usano il nuovo modello di estendibilità.
  • VSIX Project: per le estensioni basate su VSSDK o il wrapping di più output di estensione.
  • Estensione VisualStudio.Extensibility con compatibilità VSSDK : per le estensioni ibride che usano entrambi i modelli.
  • Progetto VSIX vuoto — contenitore VSIX vuoto per la creazione di pacchetti di componenti esistenti.

Tip

Per le nuove estensioni, è consigliabile Visual Studio 18.11 o versione successiva e il modello Modern VSIX Project. Selezionare VisualStudio.Extensibility (Out-Of-Process) per le funzionalità supportate da questo modello; selezionare un'opzione VSSDK o ibrida solo quando sono necessarie API in-process. Nelle versioni precedenti di Visual Studio usare il modello di estensione VisualStudio.Extensibility o il modello compatibile con VSSDK quando sono necessarie API VSSDK.

Estensioni del pacchetto in un progetto VSIX

Note

Il source.extension.vsixmanifest file e i passaggi seguenti si applicano solo alle estensioni VSSDK e ibride. Le estensioni VisualStudio.Extensibility (out-of-process) generano i metadati dal ExtensionConfiguration.Metadata codice. Non è necessario alcun file manifesto.

È possibile creare un pacchetto di un'estensione o di un componente esistente inserendola in un progetto VSIX:

  1. Creare un progetto VSIX usando uno dei modelli precedenti.
  2. Il source.extension.vsixmanifest file viene aperto in Manifest Designer.
  3. Nella scheda Asset selezionare Nuovo per aggiungere componenti.
  4. Nell'elenco Tipo scegliere il tipo di asset da aggiungere , ad esempio Microsoft.VisualStudio.MefComponent, Microsoft.VisualStudio.VsPackage.
  5. Impostare Source su Un progetto nella soluzione corrente e selezionare il progetto.

Il formato VSIX supporta il packaging di VSPackage, componenti MEF, assembly, modelli di progetto, modelli di elemento, controlli della casella degli strumenti e tipi di estensione personalizzati.

Aggiungere dipendenze a un pacchetto VSIX

È possibile configurare VSIX per richiedere altre estensioni come dipendenze. Quando un utente installa l'estensione, il programma di installazione verifica che siano presenti tutte le dipendenze necessarie.

Per aggiungere una dipendenza:

  1. Apri source.extension.vsixmanifest nella visualizzazione Progettazione.
  2. Passare alla scheda Dipendenze e selezionare Nuovo.
  3. Scegliere Estensione installata per selezionare una dipendenza dalle estensioni già installate o File nel file system per fare riferimento direttamente a un altro VSIX.

Richiedere una versione Visual Studio specifica

Per specificare come destinazione un numero di build minimo Visual Studio, impostare l'intervallo InstallationTarget di versioni:

<Installation>
  <InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,)" />
</Installation>

Note

A partire da Visual Studio 2026, viene preso in considerazione solo il limite inferiore dell'intervallo di versioni. Il limite superiore viene ignorato a scopo di compatibilità. Vedi Compatibilità delle estensioni.

Creare un pacchetto di estensione

Un pacchetto di estensioni è un set di estensioni che possono essere installate insieme. I pacchetti di estensione consentono di condividere le estensioni preferite con i colleghi o aggregare un set di estensioni per uno scenario.

Per creare un pacchetto di estensione:

  1. Creare un nuovo Project VSIX.
  2. Fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e scegliere Aggiungi>nuovo elemento.
  3. Selezionare il modello Extension Pack . Questo aggiunge un file .vsext.
  4. Modificare il .vsext file per elencare le estensioni da includere:
{
  "id": "MyExtensionPack",
  "name": "My Extension Pack",
  "description": "A curated set of extensions for my team",
  "version": "1.0.0.0",
  "extensions": [
    {
      "vsixId": "41858b2d-ff0b-4a43-80b0-f1b2d6084935",
      "name": "AlignAssignments"
    },
    {
      "vsixId": "42374550-426a-400e-96f9-237682e8dea6",
      "name": "CopyAsHtml"
    }
  ]
}
  1. Trova l'ID dell'estensione in vsixIdVisual Studio Marketplace ↗: apri la pagina dell'estensione e seleziona Copia ID.
  2. Compilare e pubblicare il progetto. Vedi Pubblicare nel Marketplace.

Note

I Pacchetti di estensione possono installare solo le estensioni disponibili nel Marketplace ↗ Visual Studio o in una raccolta privata.

Panoramica dell'architettura delle estensioni

Comprendere come Visual Studio carica l'estensione consente di prendere decisioni migliori per la creazione di pacchetti e la distribuzione.

VisualStudio.Extensibility (out-of-process)

Le estensioni out-of-process vengono eseguite in un processo separato da Visual Studio e comunicano tramite un canale JSON-RPC:

┌─────────────────────┐       JSON-RPC        ┌──────────────────────┐
│   Visual Studio     │◄─────────────────────►│  Extension Process   │
│   (DevEnv.exe)      │                        │  (.NET 8+)           │
│                     │                        │                      │
│  ┌───────────────┐  │                        │  ┌────────────────┐  │
│  │ Extension Host│  │                        │  │ Your Extension │  │
│  │ (manages      │  │                        │  │ Code           │  │
│  │  lifecycle)   │  │                        │  └────────────────┘  │
│  └───────────────┘  │                        └──────────────────────┘
└─────────────────────┘

Caratteristiche chiave:

  • Estensione eseguita su .NET moderni (8+)
  • Gli arresti anomali del processo di estensione hanno meno probabilità di arrestare Visual Studio
  • Installare/disinstallare senza riavviare VS
  • Installazione per utente (nessun amministratore richiesto)

VSSDK / Ibrido (in-process)

Le estensioni in-process vengono caricate direttamente nel processo di Visual Studio:

┌──────────────────────────────────────────┐
│   Visual Studio (DevEnv.exe)             │
│                                          │
│  ┌────────────────┐  ┌────────────────┐  │
│  │ VS Core        │  │ Your Extension │  │
│  │ Services       │◄─┤ (.NET Framework│  │
│  │                │  │  or hybrid)    │  │
│  └────────────────┘  └────────────────┘  │
└──────────────────────────────────────────┘

Caratteristiche chiave:

  • Accesso completo a tutte le API e i servizi di Visual Studio
  • Limitato a .NET Framework (a meno che non si tratti di una configurazione ibrida)
  • I bug di estensione possono influire sulla stabilità di VS
  • Richiede il riavvio di VS durante l'installazione/l'aggiornamento

Cosa contiene un pacchetto .vsix

Un .vsix file è un archivio ZIP con una struttura standard. Il contenuto varia in base al modello di estensione:

Componente VisualStudio.Extensibility VSSDK
Metadati dell'estensione ExtensionConfiguration nel codice source.extension.vsixmanifest
Binari dell'estensione Le tue DLL .NET 8+ Le tue DLL di .NET Framework
File di localizzazione .vsextension/string-resources.json .vsixlangpack file
Tipi di contenuto [Content_Types].xml [Content_Types].xml
Manifest del pacchetto Generato automaticamente extension.vsixmanifest Scritto manualmente source.extension.vsixmanifest