Condividi tramite


Risorse nei pacchetti VSPackage

È possibile incorporare risorse localizzate in DLL dell'interfaccia utente satellite native, DLL satellite gestite o in un VSPackage gestito stesso.

Alcune risorse non possono essere incorporate in VSPackage. È possibile incorporare i tipi gestiti seguenti:

  • Stringhe

  • Chiavi di caricamento del pacchetto (che sono anche stringhe)

  • Icone della finestra degli strumenti

  • File CTO (Compiled Command Table Output)

  • Bitmap CTO

  • Guida della riga di comando

  • Informazioni sui dati della finestra di dialogo

Le risorse in un pacchetto gestito vengono selezionate in base all'ID risorsa. Un'eccezione è il file CTO, che deve essere denominato CTMENU. Il file CTO deve essere visualizzato nella tabella delle risorse come .byte[] Tutti gli altri elementi di risorsa sono identificati dal tipo.

È possibile usare l'attributo PackageRegistrationAttribute per indicare a Visual Studio che sono disponibili risorse gestite.

[PackageRegistration(UseManagedResourcesOnly = true)]
public sealed class MyPackage : Package

L'impostazione PackageRegistrationAttribute in questo modo indica che Visual Studio deve ignorare le DLL satellite non gestite durante la ricerca di risorse, ad esempio usando LoadPackageString. Se Visual Studio rileva due o più risorse con lo stesso ID risorsa, usa la prima risorsa trovata.

Esempio

L'esempio seguente è una rappresentazione gestita di un'icona della finestra degli strumenti.

<data name="1001"
     type="System.Resources.ResXFileRef,System.Windows.Forms">
     <value>
     MyToolWinIcon.bmp;
     System.Drawing.Bitmap,
     System.Drawing,
     Version=1.0.0.0,
     Culture=neutral,
     PublicKeyToken=b03f5f7f11d50a3a
     </value>
</data>

Nell'esempio seguente viene illustrato come incorporare la matrice di byte CTO, che deve essere denominata CTMENU.

<data name="CTMENU"
     type="System.Resources.ResXFileRef,System.Windows.Forms">
     <value>
     MyPackage.cto;
     System.Byte[],
     mscorlib,
     Version=1.0.0.0,
     Culture=neutral,
     PublicKeyToken=b03f5f7f11d50a3a
     </value>
</data>

Note sull'implementazione

Visual Studio ritarda il caricamento di VSPackage ogni volta che possibile. Una conseguenza dell'incorporamento di un file CTO in un VSPackage è che Visual Studio deve caricare tutti questi VSPackage in memoria durante l'installazione, ovvero quando compila una tabella dei comandi unita. Le risorse possono essere estratte da un VSPackage esaminando i metadati senza eseguire codice nel pacchetto VSPackage. Il VSPackage non viene inizializzato in questo momento, quindi la perdita di prestazioni è minima.

Quando Visual Studio richiede una risorsa da un VSPackage dopo l'installazione, è probabile che il pacchetto sia già caricato e inizializzato, quindi la perdita di prestazioni è minima.