Ressources dans VSPackages

Vous pouvez incorporer des ressources localisées dans des DLL d’interface utilisateur satellite natives, des DLL satellite gérées ou dans un VSPackage géré lui-même.

Certaines ressources ne peuvent pas être incorporées dans vsPackages. Les types managés suivants peuvent être incorporés :

  • Chaînes

  • Clés de chargement de package (qui sont également des chaînes)

  • Icônes de fenêtre outil

  • Fichiers de sortie de table de commandes compilés (CTO)

  • Bitmaps de CTO

  • Aide sur la ligne de commande

  • À propos des données de boîte de dialogue

Les ressources d’un package managé sont sélectionnées par ID de ressource. Une exception est le fichier CTO, qui doit être nommé CTMENU. Le fichier CTO doit apparaître dans la table de ressources en tant que byte[]. Tous les autres éléments de ressource sont identifiés par type.

Vous pouvez utiliser l’attribut PackageRegistrationAttribute pour indiquer à Visual Studio que les ressources managées sont disponibles.

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

La définition PackageRegistrationAttribute de cette façon indique que Visual Studio doit ignorer les DLL satellites non managées lorsqu’il recherche des ressources, par exemple en utilisant LoadPackageString. Si Visual Studio rencontre deux ressources ou plus qui ont le même ID de ressource, elle utilise la première ressource qu’elle trouve.

Exemple

L’exemple suivant est une représentation managée d’une icône de fenêtre d’outil.

<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>

L’exemple suivant montre comment incorporer le tableau d’octets de CTO, qui doit être nommé 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>

Remarques relatives à l’implémentation

Visual Studio retarde le chargement de VSPackages dans la mesure du possible. Une conséquence de l’incorporation d’un fichier CTO dans un VSPackage est que Visual Studio doit charger tous ces VSPackages en mémoire pendant l’installation, c’est-à-dire lorsqu’il génère une table de commandes fusionnée. Les ressources peuvent être extraites d’un VSPackage en examinant les métadonnées sans exécuter de code dans VSPackage. Le VSPackage n’est pas initialisé pour l’instant, de sorte que la perte de performances est minimale.

Lorsque Visual Studio demande une ressource à partir d’un VSPackage après l’installation, ce package est susceptible d’être déjà chargé et initialisé, de sorte que la perte de performances est minimale.