Procedimiento para configurar componentes COM basados en .NET Framework para la activación sin registro
La activación sin registro de los componentes de .NET Framework solo es un poco más complicada que la de los componentes COM. La configuración requiere dos manifiestos:
Las aplicaciones COM deben tener un manifiesto de aplicación de estilo Win32 para identificar el componente administrado.
Los componentes de .NET Framework deben tener un manifiesto de componente con la información de activación que se necesita en tiempo de ejecución.
En este tema se describe cómo asociar un manifiesto de aplicación a una aplicación, cómo asociar un manifiesto de componente a un componente y cómo incrustar un manifiesto de componente en un ensamblado.
Creación de un manifiesto de aplicación
Mediante un editor XML, cree (o modifique) el manifiesto de aplicación propiedad de la aplicación COM que está interoperando con uno o más componentes administrados.
Inserte el siguiente encabezado estándar al principio del archivo:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> </assembly>
Para obtener información sobre los elementos del manifiesto y sus atributos, consulte Manifiestos de aplicación.
Identifique al propietario del manifiesto. En el ejemplo siguiente, la versión 1 de
myComApp
es el propietario del archivo de manifiesto.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="msil" /> </assembly>
Identifique los ensamblados dependientes. En el ejemplo siguiente,
myComApp
depende demyManagedComp
.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="x86" publicKeyToken="8275b28176rcbbef" /> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="myOrganization.myDivision.myManagedComp" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="8275b28176rcbbef" /> </dependentAssembly> </dependency> </assembly>
Nombre el archivo de manifiesto y guárdelo. El nombre de un manifiesto de aplicación es el nombre del ensamblado ejecutable seguido de la extensión .manifest. Por ejemplo, el nombre del archivo de manifiesto de la aplicación de myComApp.exe es myComApp.exe.manifest.
El manifiesto de aplicación se puede instalar en el mismo directorio que la aplicación COM. Opcionalmente, se puede agregar como recurso al archivo .exe de la aplicación. Para más información, vea Acerca de los ensamblados en paralelo.
Creación de un manifiesto de componente
Mediante un editor XML, cree un manifiesto de componente para describir el ensamblado administrado.
Inserte el siguiente encabezado estándar al principio del archivo:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> </assembly>
Identifique al propietario del archivo. El elemento
<assemblyIdentity>
del elemento<dependentAssembly>
del archivo del manifiesto de aplicación debe coincidir con el del manifiesto del componente. En el ejemplo siguiente, la versión 1.2.3.4 demyManagedComp
es el propietario del archivo de manifiesto.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="myOrganization.myDivision.myManagedComp" version="1.2.3.4" publicKeyToken="8275b28176rcbbef" processorArchitecture="msil" /> </assembly>
Identifique cada clase del ensamblado. Use el elemento
<clrClass>
para identificar cada clase del ensamblado administrado de manera única. El elemento, que es un subelemento del elemento<assembly>
, tiene los atributos que se describen en la tabla siguiente.Atributo Descripción Obligatorio clsid
El identificador que especifica la clase que ha de ser activada. Sí description
Cadena que informa al usuario sobre el componente. De manera predeterminada, es una cadena vacía. No name
Cadena que representa la clase administrada. Sí progid
Identificador que hay que usar para la activación del enlace en tiempo de ejecución. No threadingModel
Modelo de subprocesos COM. El valor predeterminado es "Both". No runtimeVersion
Especifica la versión de Common Language Runtime (CLR) que se va a utilizar. Si no especifica este atributo y el CLR aún no se ha cargado, el componente se cargará con la última versión de CLR instalada antes de la versión 4. Si especifica v1.0.3705, v1.1.4322 o v2.0.50727, la versión se actualizará automáticamente a la última versión de CLR instalada antes de la versión version 4 (normalmente, v2.0.50727). Si ya se ha cargado otra versión de CLR y la versión especificada se puede cargar en paralelo y en el mismo proceso, se cargará la versión especificada; de lo contrario, se usará la versión de CLR ya cargada. Esto puede dar lugar a un error de carga. No tlbid
Identificador de la biblioteca de tipos que contiene información de tipos sobre la clase. No Todos los atributos distinguen mayúsculas de minúsculas. Se pueden obtener los CLSID, ProgIDs, modelos de subprocesos y la versión del motor en tiempo de ejecución visualizando la biblioteca de tipos exportada para el ensamblado con OLE/COM ObjectViewer (Oleview.exe).
El siguiente manifiesto de componente identifica dos clases,
testClass1
ytestClass2
.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="myOrganization.myDivision.myManagedComp" version="1.2.3.4" publicKeyToken="8275b28176rcbbef" /> <clrClass clsid="{65722BE6-3449-4628-ABD3-74B6864F9739}" progid="myManagedComp.testClass1" threadingModel="Both" name="myManagedComp.testClass1" runtimeVersion="v1.0.3705"> </clrClass> <clrClass clsid="{367221D6-3559-3328-ABD3-45B6825F9732}" progid="myManagedComp.testClass2" threadingModel="Both" name="myManagedComp.testClass2" runtimeVersion="v1.0.3705"> </clrClass> <file name="MyManagedComp.dll"> </file> </assembly>
Nombre el archivo de manifiesto y guárdelo. El nombre de un manifiesto de componente es el nombre de la biblioteca de ensamblados seguido de la extensión .manifest. Por ejemplo, myManagedComp.dll es myManagedComp.manifest.
Es necesario incrustar el manifiesto de componente como recurso en el ensamblado
Para incrustar un manifiesto de componente en un ensamblado administrado
Cree un script de recursos que contenga la siguiente instrucción:
1 RT_MANIFEST myManagedComp.manifest
En esta instrucción,
myManagedComp.manifest
es el nombre del manifiesto de componente que se incrusta. En este ejemplo, el archivo de script se denominamyresource.rc
.Compile el script mediante el compilador de recursos de Microsoft Windows (Rc.exe). En el símbolo del sistema, escriba el siguiente comando:
rc myresource.rc
Rc.exe produce el archivo de recursos
myresource.res
.Compile de nuevo el archivo de origen del ensamblado y especifique el archivo de recursos mediante la opción /win32res:
/win32res:myresource.res
Una vez más,
myresource.res
es el nombre del archivo de recursos que contiene los recursos incrustados.
Vea también
- Interoperabilidad COM sin registro
- Requisitos para interoperabilidad COM sin registro
- Configuración de componentes COM para la activación sin registro
- Registration-Free Activation of .NET-Based Components: A Walkthrough (Tutorial: Activación sin registro de componentes basados en .NET)