Compartilhar 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 em VSPackages. Os seguintes tipos gerenciados podem ser incorporados:

  • Cadeias de caracteres

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

  • Ícones da janela de ferramentas

  • Arquivos CTO (Saída de Tabela de Comandos) Compilados

  • 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[]arquivo . 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élites não gerenciadas quando ele procura recursos, por exemplo, usando LoadPackageStringo . Se o Visual Studio encontrar dois ou mais recursos que têm a mesma ID de recurso, ele usa o primeiro recurso que encontrar.

Exemplo

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 no momento, portanto, a perda de desempenho é mínima.

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