Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
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