Compartir a través de


Recursos de VSPackages

Puede insertar recursos localizados en archivos DLL nativos de la interfaz de usuario satélite, archivos DLL satélite administrados o en un VSPackage administrado.

Algunos recursos no se pueden incrustar en VSPackages. Se pueden incrustar los siguientes tipos administrados:

  • Cadenas

  • Claves de carga del paquete (que también son cadenas)

  • Iconos de ventana de herramientas

  • Archivos de salida de tabla de comandos compilados (CTO)

  • Mapas de bits de CTO

  • Ayuda de línea de comandos

  • Acerca de los datos del cuadro de diálogo

Los recursos de un paquete administrado se seleccionan mediante el identificador de recurso. Una excepción es el archivo CTO, que debe denominarse CTMENU. El archivo CTO debe aparecer en la tabla de recursos como .byte[] Todos los demás elementos de recursos se identifican por tipo.

Puede usar el PackageRegistrationAttribute atributo para indicar a Visual Studio que los recursos administrados están disponibles.

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

Si se establece PackageRegistrationAttribute de esta manera, se indica que Visual Studio debe omitir los archivos DLL de satélite no administrados cuando busca recursos, por ejemplo, mediante LoadPackageString. Si Visual Studio encuentra dos o más recursos que tienen el mismo identificador de recurso, usa el primer recurso que encuentra.

Ejemplo

El ejemplo siguiente es una representación administrada de un icono de ventana de herramientas.

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

En el ejemplo siguiente se muestra cómo insertar la matriz de bytes de CTO, que debe denominarse 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>

Notas de implementación

Visual Studio retrasa la carga de VSPackages siempre que sea posible. Una consecuencia de insertar un archivo de CTO en UN VSPackage es que Visual Studio debe cargar todos estos VSPackages en memoria durante la instalación, que es cuando compila una tabla de comandos combinada. Los recursos se pueden extraer de un VSPackage examinando los metadatos sin ejecutar código en VSPackage. VsPackage no se inicializa en este momento, por lo que la pérdida de rendimiento es mínima.

Cuando Visual Studio solicita un recurso desde un VSPackage después de la instalación, es probable que ese paquete ya se cargue e inicialice, por lo que la pérdida de rendimiento es mínima.