Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Hay dos formas de generar un ensamblado de interoperabilidad primaria:
- Utilizar el Importador de la biblioteca de tipos (Tlbimp.exe), que se incluye en .NET Framework SDK.
- Crear ensamblados de interoperabilidad primaria manualmente.
Es necesario disponer de un par de claves criptográficas para firmar el ensamblado con un nombre seguro. Para obtener información más detallada, vea Crear un par de claves.
Utilizar el Importador de la biblioteca de tipos
Crear un ensamblado de interoperabilidad primaria mediante Tlbimp.exe para importar una biblioteca de tipos es sencillo. Tlbimp.exe ofrece las siguientes medidas de seguridad:
- Busca otros ensamblados de interoperabilidad primaria registrados antes de crear nuevos ensamblados de interoperabilidad para las referencias de bibliotecas de tipos anidados.
- No emite el ensamblado de interoperabilidad primaria si no se especifica el contenedor o el nombre del archivo para darle al ensamblado de interoperabilidad primaria un nombre seguro.
- No emite ningún ensamblado de interoperabilidad primaria si se omiten las referencias a ensamblados dependientes.
- No emite ningún ensamblado de interoperabilidad primaria si se agregan referencias a ensamblados dependientes que no son ensamblados de interoperabilidad primaria.
Para generar ensamblados de interoperabilidad primaria utilizando Tlbimp.exe
En el símbolo del sistema, escriba:
tlbimp archivotlb **/primary /keyfile:**nombredearchivo **/out:**nombredeensamblado
En este comando, archivotlb es el archivo que contiene la biblioteca de tipos COM, nombredearchivo es el nombre del contenedor o archivo que contiene el par de claves, y nombredeensamblado es el nombre del ensamblado que hay que firmar con un nombre seguro.
En el siguiente ejemplo se importa la biblioteca de tipos COM LibUtil.tlb y se firma el ensamblado LibUtil.dll con un nombre seguro mediante el archivo de claves CompanyA.snk. Como se omite un nombre de espacio de nombres específico, en el ejemplo se crea el nombre de espacios predeterminado, LibUtil.
tlbimp LibUtil.tlb /primary /keyfile:CompanyA.snk /out:LibUtil.dll
Para obtener un nombre más descriptivo (utilizando la norma de nomenclatura Nombredelproveedor.Nombredelabiblioteca), en el siguiente ejemplo se reemplazan los nombres predeterminados del archivo del ensamblado y del espacio de nombres.
tlbimp LibUtil.tlb /primary /keyfile:CompanyA.snk /namespace:CompanyA.LibUtil /out:CompanyA.LibUtil.dll
Los ensamblados de interoperabilidad primaria sólo pueden hacer referencia a otros ensamblados de interoperabilidad primaria. Si el ensamblado hace referencia a tipos de otra biblioteca de tipos COM, es necesario obtener un ensamblado de interoperabilidad primaria del editor antes de poder generar el ensamblado de interoperabilidad primaria. Si es el editor, debe generar un ensamblado de interoperabilidad primaria para la biblioteca de tipos dependiente antes de generar el ensamblado de interoperabilidad primaria que hace la referencia.
En el ejemplo siguiente, se importa MyLib.tlb, que hace referencia a CompanyA.LibUtil.dll, y se firma el ensamblado CompanyB.MyLib.dll con un nombre seguro mediante el archivo de claves CompanyB.snk. El espacio de nombres, CompanyB.MyLib, reemplaza al nombre del espacio de nombres predeterminado.
tlbimp MyLib.tlb /primary /keyfile:CompanyB.snk /namespace:CompanyB.MyLib /reference:CompanyA.LibUtil.dll /out:CompanyB.MyLib.dll
Cuando está instalado en el directorio actual, no se puede descubrir un ensamblado de interoperabilidad primaria dependiente que tenga un número de versión diferente del de la biblioteca de tipos original. Hay que registrar el ensamblado de interoperabilidad primaria dependiente en el Registro de Windows o utilizar la opción /reference para asegurar que Tlbimp.exe encuentra el archivo DLL dependiente.
Opcionalmente, se puede incluir más de una versión de una biblioteca de tipos. Por ejemplo, se puede indicar que un ensamblado de interoperabilidad primaria admite las versiones 1.0 y 1.1 de la biblioteca de tipos.
Para incluir varias versiones de una biblioteca de tipos
Importe un archivo de biblioteca de tipos como se ha descrito en el procedimiento previo:
tlbimp LibUtil.tlb /primary /keyfile:CompanyA.snk /out:LibUtil.dllCree un archivo de texto a partir del ensamblado importado utilizando el Desensamblador de MSIL (Ildasm.exe).
ildasm LibUtil.dll /out:LibUtil.ilUtilizando un editor de texto, inserte un segundo atributo PrimaryInteropAssemblyAttribute debajo del atributo agregado por Tlbimp.exe. Incluya el número más alto y el número más bajo de versión que represente la segunda versión de la biblioteca de tipos.
Genere y firme un nuevo ensamblado a partir del archivo de texto modificado utilizando el Ensamblador de MSIL (Ilasm.exe).
idasm LibUtil.il /dll /key:CompanyA.snk
Crear ensamblados de interoperabilidad primaria manualmente
Otro modo menos frecuente de crear una biblioteca de tipos consiste en crear un ensamblado de interoperabilidad primaria manualmente en el código fuente utilizando un lenguaje compatible con Common Language Specification (CLS), como C#. Este procedimiento es útil cuando una biblioteca de tipos no está disponible.
Para generar un ensamblado de interoperabilidad primaria en código fuente
- Cree un ensamblado de interoperabilidad en código fuente. Para obtener instrucciones, vea Crear un contenedor de forma manual Tenga en cuenta que debe incluir todos los tipos COM de la biblioteca de tipos cuando cree manualmente un ensamblado de interoperabilidad primaria.
- En el nivel del ensamblado, aplique los siguientes atributos:
- AssemblyKeyFileAttribute o AssemblyKeyNameAttribute, para especificar el nombre del archivo o contenedor que contiene el par de claves que se debe utilizar al firmar el ensamblado con un nombre seguro.
- GuidAttribute, para especificar el identificador de biblioteca (LIBID) de la biblioteca de tipos de destino.
- PrimaryInteropAssemblyAttribute, para identificar el ensamblado como ensamblado de interoperabilidad primaria.
En el siguiente ejemplo de código se aplica AssemblyKeyFileAttribute con un archivo de claves denominado CompanyA.snk y se especifica que este ensamblado es un ensamblado de interoperabilidad primaria que admite las versiones 4.2 y 5.2 de la biblioteca de tipos. Como muestra el ejemplo, se puede incluir más de una versión de una biblioteca de tipos aplicando atributos de nivel de ensamblado adicionales.
[assembly:AssemblyKeyFile(@"..\..\CompanyA.snk")]
[assembly:Guid("97d25db0-0363-1cf-abc4-02608 c9e7553"]
[assembly:PrimaryInteropAssembly(4, 2)]
[assembly:PrimaryInteropAssembly(5, 2)]
También se puede retrasar la firma de un ensamblado en el momento de la compilación. Para obtener más información, vea Retrasar la firma de un ensamblado.
Vea también
Crear ensamblados de interoperabilidad primaria Denominar ensamblados de interoperabilidad primaria Personalizar ensamblados de interoperabilidad primaria Distribuir ensamblados de interoperabilidad primaria para los programadores