Partilhar via


Recursos em VSPackages

Você pode incorporar recursos localizados em DLLs de interface do usuário de satélite nativas, DLLs de satélite gerenciadas ou em um VSPackage gerenciado em si.

Alguns recursos não podem ser incorporados no VSPackages. Os seguintes tipos gerenciados podem ser incorporados:

  • Cordas

  • Chaves de carregamento do pacote (que também são strings)

  • Ícones da janela da ferramenta

  • Arquivos compilados de saída de tabela de comando (CTO)

  • Bitmaps de CTO

  • Ajuda da linha de comando

  • Sobre os dados da caixa de diálogo

Os recursos em um pacote gerenciado são selecionados pela ID do recurso. Uma exceção é o arquivo CTO, que deve ser chamado CTMENU. O arquivo CTO deve aparecer na tabela de recursos como um byte[]. Todos os outros itens de recurso são identificados por tipo.

Você pode usar o PackageRegistrationAttribute atributo para indicar ao Visual Studio que os recursos gerenciados estão disponíveis.

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

A configuração PackageRegistrationAttribute dessa maneira indica que o Visual Studio deve ignorar DLLs satélite não gerenciadas quando procura recursos, por exemplo, usando LoadPackageString. Se o Visual Studio encontrar dois ou mais recursos que têm a mesma ID de recurso, ele usará o primeiro recurso encontrado.

Example

O exemplo a seguir é uma representação gerenciada de um ícone de janela de ferramenta.

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

O exemplo a seguir demonstra como incorporar a matriz de bytes CTO, que deve ser chamada 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 implementação

Visual Studio atrasa o carregamento de VSPackages sempre que possível. Uma consequência da incorporação de um arquivo CTO em um VSPackage é que o Visual Studio deve carregar todos esses VSPackages na memória durante a instalação, que é quando ele cria uma tabela de comandos mesclada. Os recursos podem ser extraídos de um VSPackage examinando os metadados sem executar código no VSPackage. O VSPackage não é inicializado neste momento, portanto, a perda de desempenho é mínima.

Quando o Visual Studio solicita um recurso de um VSPackage após a instalação, é provável que esse pacote já esteja carregado e inicializado, portanto, a perda de desempenho é mínima.