Como: Gerar assemblies de interoperabilidade primária usando Tlbimp.exe

Note

Esta orientação é específica para o .NET Framework. Para interoperabilidade COM do .NET moderno, utilize a interoperabilidade COM gerada por código-fonte ou a API System.Runtime.InteropServices.ComWrappers. Para mais informações, consulte visão geral da interoperabilidade COM e geração de fontes COM.

Há duas maneiras de gerar um assembly de interoperabilidade primário:

  • Utilizar o Importador de Bibliotecas de Tipos (Tlbimp.exe) fornecido pelo SDK do Windows.

    A forma mais direta de produzir assemblies de interoperabilidade principais é utilizar o Tlbimp.exe (Importador de Bibliotecas de Tipos). Tlbimp.exe prevê as seguintes salvaguardas:

    • Verifica se existem outros assemblies de interoperabilidade primários registados antes de criar novos assemblies de interoperabilidade para quaisquer referências aninhadas a bibliotecas de tipos.
    • Falha ao gerar o assembly de interoperabilidade primário se não for especificado o contentor nem o nome do ficheiro para atribuir um nome seguro ao assembly de interoperabilidade primário.
    • Falha ao gerar um assembly de interoperabilidade primário ao omitir referências aos assemblies de que depende.
    • Falha ao gerar um assembly de interoperabilidade primário se adicionar referências a assemblies dependentes que não sejam assemblies de interoperabilidade primários.
  • Criar manualmente assemblies de interoperabilidade primários no código-fonte, utilizando uma linguagem em conformidade com a Common Language Specification (CLS), como C#. Essa abordagem é útil quando uma biblioteca de tipos não está disponível.

Você deve ter um par de chaves criptográficas para assinar a assemblagem com um nome seguro. Para obter detalhes, consulte Criando um par de chaves.

Gerar um conjunto primário de interoperabilidade usando Tlbimp.exe

  1. Na linha de comandos, escreva:

    tlbimptlbfile/primary /keyfile:nome do arquivo/out:assemblyname

    Neste comando, tlbfile é o arquivo que contém a biblioteca de tipos COM, filename é o nome do contêiner ou arquivo que contém o par de chaves e assemblyname é o nome do assembly a ser assinado com um nome forte.

Os assemblies de interoperabilidade principais podem fazer referência apenas a outros assemblies de interoperabilidade principais. Se o assembly fizer referência a tipos de uma biblioteca de tipos COM de terceiros, você deverá obter um assembly de interoperabilidade primário do editor antes de gerar o assembly de interoperabilidade primário. Se for o publicador, deverá gerar um assembly de interoperabilidade primário para a biblioteca de tipos da qual depende antes de gerar o assembly de interoperabilidade primário que a referencia.

Um assembly de interoperabilidade primário dependente com um número de versão diferente do da biblioteca de tipos original não é detetável quando instalado no diretório atual. Você deve registar o assembly de interoperabilidade primário de que depende no registo do Windows ou usar a opção /reference para garantir que o Tlbimp.exe localiza a DLL dependente.

Você também pode encapsular várias versões de uma biblioteca de tipos. Para obter instruções, consulte Como encapsular várias versões de bibliotecas de tipos.

Exemplo

O exemplo seguinte importa a biblioteca de tipos COM LibUtil.tlb e assina a assemblagem LibUtil.dll com um nome seguro, utilizando o ficheiro de chave CompanyA.snk. Ao omitir um nome de namespace específico, este exemplo produz o namespace padrão, LibUtil.

tlbimp LibUtil.tlb /primary /keyfile:CompanyA.snk /out:LibUtil.dll

Para um nome mais descritivo (usando o VendorName.LibraryName naming guideline), o exemplo a seguir substitui o nome do arquivo assembly padrão e o nome do namespace.

tlbimp LibUtil.tlb /primary /keyfile:CompanyA.snk /namespace:CompanyA.LibUtil /out:CompanyA.LibUtil.dll

O exemplo seguinte importa MyLib.tlb, que faz referência a CompanyA.LibUtil.dll, e assina a assemblagem CompanyB.MyLib.dll com um nome seguro, utilizando o ficheiro de chaves CompanyB.snk. O namespace, CompanyB.MyLib, substitui o nome do namespace padrão.

tlbimp MyLib.tlb /primary /keyfile:CompanyB.snk /namespace:CompanyB.MyLib /reference:CompanyA.LibUtil.dll /out:CompanyB.MyLib.dll

Consulte também