Manifiestos de ensamblado

Un manifiesto de ensamblado es un archivo XML que describe un ensamblado en paralelo. Los manifiestos de ensamblado describen los nombres y versiones de ensamblados, archivos y recursos en paralelo del ensamblado, así como la dependencia del ensamblado en otros ensamblados en paralelo. La instalación, activación y ejecución correctas de ensamblados en paralelo requiere que el manifiesto del ensamblado siempre acompañe a un ensamblado en el sistema.

Para obtener una lista completa del esquema XML, vea Esquema de archivo de manifiesto.

Los manifiestos de ensamblado tienen los siguientes elementos y atributos.

Elemento Atributos Obligatorio
assembly
manifestVersion
noInheritable No
assemblyIdentity
type
name
language No
processorArchitecture No
version
publicKeyToken No
Dependencia No
dependentAssembly No
file No
name
hashalg No
hash No
comClass No
description No
clsid
threadingModel No
tlbid No
progid No
miscStatus No
miscStatusIcon No
miscStatusContent No
miscStatusDocPrint No
miscStatusThumbnail No
typelib No
tlbid
version
helpdir
resourceid No
flags No
comInterfaceExternalProxyStub No
iid
baseInterface No
numMethods No
name No
tlbid No
proxyStubClsid32 No
comInterfaceProxyStub No
iid
name
tlbid No
baseInterface No
numMethods No
proxyStubClsid32 No
threadingModel No
windowClass No
Versionado No

Ubicación del archivo

Los manifiestos de ensamblado se pueden instalar en tres ubicaciones:

  • Como manifiestos que acompañan a ensamblados compartidos, los manifiestos de ensamblado deben instalarse como un archivo independiente en la caché de ensamblados en paralelo. Normalmente, esta es la carpeta WinSxS en el directorio de Windows.
  • Como manifiestos que acompañan a ensamblados privados, los manifiestos de ensamblado deben instalarse en la estructura de directorios de la aplicación. Normalmente, se trata de un archivo independiente en la misma carpeta que el archivo ejecutable de la aplicación.
  • Como recurso en un archivo DLL, el ensamblado está disponible para el uso privado del archivo DLL. No se puede incluir un manifiesto de ensamblado como un recurso en un EXE. Un archivo EXE puede incluir un manifiesto de aplicación como un recurso.

Sintaxis de los nombres de archivo

El nombre de un manifiesto de ensamblado es cualquier nombre de archivo válido seguido de .manifest.

Por ejemplo, un manifiesto de ensamblado que hace referencia a myassembly usaría la siguiente sintaxis de nombre de archivo: myassembly.<resource ID>.manifest. Puede omitir el <resource ID> campo si el manifiesto del ensamblado se está instalando como un archivo independiente o si el identificador de recurso es 1.

Nota

Debido a la forma en que se buscan ensamblados privados en paralelo, se aplican las siguientes restricciones de nomenclatura al empaquetar un archivo DLL como un ensamblado privado. Una manera recomendada de hacerlo es colocar el manifiesto de ensamblado en el archivo DLL como un recurso. En este caso, el identificador de recurso debe ser igual a 1 y el nombre del ensamblado privado puede ser el mismo que el nombre del archivo DLL. Por ejemplo, si el nombre del archivo DLL es Microsoft.Windows.mysample.dll, el valor del atributo name usado en el elemento assemblyIdentity del manifiesto también puede ser Microsoft.Windows.mysample. Una manera alternativa es colocar el manifiesto del ensamblado en un archivo independiente. En este caso, el nombre del ensamblado y su manifiesto deben ser diferentes del nombre del archivo DLL. Por ejemplo, Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest y Microsoft.Windows.Mysample.dll. Para obtener más información sobre cómo buscar ensamblados privados en paralelo, vea Secuencia de búsqueda de ensamblados.

Elementos

Los nombres de los elementos y atributos distinguen mayúsculas de minúsculas. Los valores de los elementos y atributos no distinguen mayúsculas de minúsculas, excepto el valor del atributo de tipo.

ensamblaje

Un elemento contenedor. Su primer subelemento debe ser un elemento assemblyIdentity o noInheritable . El manifiesto del ensamblado describe de forma única el ensamblado en paralelo identificado por assemblyIdentity. Necesario.

El elemento de ensamblado debe estar en el espacio de nombres "urn:schemas-microsoft-com:asm.v1". Los elementos secundarios del ensamblado también deben estar en este espacio de nombres, mediante herencia o etiquetado.

El elemento assembly tiene el atributo siguiente.

Atributo Descripción
manifestVersion El atributo manifestVersion debe establecerse en 1.0.

noInheritable

Incluya este elemento en un manifiesto de ensamblado para indicar que el ensamblado administra los contextos de activación y sus objetos. El elemento noInheritable debe ser un subelemento de un elemento de ensamblado . El elemento assemblyIdentity debe aparecer después de cualquier elemento noInheritable . El elemento noInheritable es necesario en el manifiesto del ensamblado si cualquier manifiesto de aplicación que incluya el elemento noInherit usa el ensamblado. Un elemento noInheritable de un manifiesto de aplicación no tiene ningún efecto. Un elemento noInheritable no tiene elementos secundarios.

Assemblyidentity

Describe e identifica de forma única un ensamblado en paralelo.

Como primer subelemento de un elemento de ensamblado , assemblyIdentity describe e identifica de forma única el ensamblado en paralelo que posee este manifiesto de ensamblado. Esto se denomina ensamblado DEF-contextIdentity del manifiesto del ensamblado.

Como primer subelemento de un elemento dependentAssembly , assemblyIdentity describe e identifica de forma única un ensamblado en paralelo que usa el ensamblado de contexto DEFIdentity. Esto se denomina assemblyIdentity ref-context del manifiesto del ensamblado. El ensamblado DEF-context requiere que el ensamblado REF-context funcione correctamente. Tenga en cuenta que cada assemblyIdentity ref-context debe coincidir exactamente con un assemblyIdentity de contexto DEF correspondiente en el manifiesto de ensamblado propio del ensamblado al que se hace referencia.

Este elemento no tiene subelementos. El elemento assemblyIdentity tiene los siguientes atributos.

Atributo Descripción
type Especifica el tipo de ensamblado. El valor debe ser win32 y en minúsculas. Necesario.
name Asigna un nombre único al ensamblado. Use el siguiente formato para el nombre del ensamblado: Organization.Division.Name. Por ejemplo, Microsoft.Windows.mysampleAsm. Necesario. Tenga en cuenta que, en el caso de un archivo DLL empaquetado como un ensamblado privado con un archivo de manifiesto independiente, el nombre del ensamblado debe ser diferente del nombre del archivo DLL y el manifiesto.
language Identifica el idioma del ensamblado. Opcional. Si el ensamblado es específico del lenguaje, especifique el código de lenguaje DHTML. En el ensamblado DEF-contextIdentity de un manifiesto de ensamblado destinado a uso mundial (neutral del lenguaje) se omite el atributo language.
En un ensamblado ref-contextIdentity de un manifiesto de ensamblado destinado a uso mundial (neutral del lenguaje), establezca el valor del idioma en "*".
processorArchitecture Especifica el procesador. Los valores válidos son x86 para Windows de 32 bits y ia64 para Windows de 64 bits. Opcional.
version Especifica la versión del ensamblado. Use el formato de versión de cuatro partes: mmmmm.nnnnn.oooo.ppppp. Cada una de las partes separadas por períodos puede ser de 0 a 65535 inclusive. Para obtener más información, vea Versiones de ensamblado. Necesario.
publicKeyToken Cadena hexadecimal de 16 caracteres que representa los últimos 8 bytes del hash SHA-1 de la clave pública con la que se firma el ensamblado. La clave pública usada para firmar el catálogo debe ser de 2048 bits o superior. Necesario para ensamblados en paralelo compartidos.

Dependencia

Elemento contenedor que incluye al menos un elemento dependentAssembly. El primer subelemento debe ser un elemento dependentAssembly . Una dependencia no tiene atributos. Opcional.

dependentAssembly

El primer subelemento debe ser un elemento assemblyIdentity que describa e identifique de forma única un ensamblado en paralelo que usa el ensamblado en paralelo que posee este manifiesto de ensamblado. Cada dependienteAssembly debe estar dentro exactamente de una dependencia. Opcional.

Archivo

Contiene archivos usados por un ensamblado en paralelo. Contiene subelementos comClass, typelib, windowClass, comInterfaceProxyStub . Opcional.

El elemento file tiene los siguientes atributos.

Atributo Descripción
name Nombre del archivo, por ejemplo, Conctl32.dll.
hashalg Algoritmo usado para crear un hash del archivo. Este valor debe ser SHA1.
hash Hash del archivo al que se hace referencia por nombre. Cadena hexadecimal de longitud en función del algoritmo hash.

comClass

Subelemento de un elemento de archivo . Opcional.

El elemento comClass tiene los siguientes atributos.

Atributo Descripción
description Nombre de clase.
clsid GUID que identifica de forma única la clase . Necesario. El valor debe tener el formato de un GUID válido.
threadingModel El modelo de subprocesos utilizado por las clases COM en proceso. Si esta propiedad es null, no se usa ningún modelo de subproceso. El componente se crea en el subproceso principal del cliente y las llamadas de otros subprocesos se serializarán en este subproceso. Opcional. Los valores válidos son: "Apartment", "Free", "Both" y "Neutral".
tlbid GUID de la biblioteca de tipos para este componente COM. El valor debe tener el formato de un GUID. Opcional.
progid Identificador de programación dependiente de la versión asociado al componente COM. El formato de un ProgID es <proveedor>.<componente>.<versión>.
miscStatus Duplicados en el ensamblado manifiestan la información proporcionada por la clave del Registro MiscStatus. Si no se encuentran los valores de los atributos miscStatusIcon, miscStatusContent, miscStatusDocprint o miscStatusThumbnail , se usa el valor predeterminado correspondiente enumerado en miscStatus para los atributos que faltan. El valor puede ser una lista delimitada por comas de los valores de atributo de la tabla siguiente. Puede usar este atributo si la clase COM es una clase OCX que requiere valores de clave del Registro Miscstatus.
miscStatusIcon Duplica en el manifiesto del ensamblado la información proporcionada por DVASPECT_ICON. Puede proporcionar un icono de un objeto. El valor puede ser una lista delimitada por comas de los valores de atributo de la tabla siguiente. Puede usar este atributo si la clase COM es una clase OCX que requiere valores de clave del Registro Miscstatus.
miscStatusContent Duplica en el manifiesto del ensamblado la información proporcionada por DVASPECT_CONTENT. Puede proporcionar un documento compuesto que se pueda mostrar para una pantalla o impresora. El valor puede ser una lista delimitada por comas de los valores de atributo de la tabla siguiente. Puede usar este atributo si la clase COM es una clase OCX que requiere valores de clave del Registro Miscstatus.
miscStatusDocprint Duplica en el manifiesto del ensamblado la información proporcionada por DVASPECT_DOCPRINT. Puede proporcionar una representación de objeto que se muestre en la pantalla como si se imprimiera en una impresora. El valor puede ser una lista delimitada por comas de los valores de atributo de la tabla siguiente. Puede usar este atributo si la clase COM es una clase OCX que requiere valores de clave del Registro Miscstatus.
miscStatusThumbnail Duplica en un manifiesto de ensamblado la información proporcionada por DVASPECT_THUMBNAIL. Puede proporcionar una miniatura de un objeto que se puede mostrar en una herramienta de exploración. El valor puede ser una lista delimitada por comas de los valores de atributo de la tabla siguiente. Puede usar este atributo si la clase COM es una clase OCX que requiere valores de clave del Registro Miscstatus.

El elemento comClass puede tener <elementos progid>... como elementos secundarios, que enumeran los progid dependientes de la versión.

En el ejemplo siguiente se muestra un elemento comClass incluido en un elemento file .

<file name="sampleu.dll">
        <comClass description="Font Property Page"
    clsid="{0BE35200-8F91-11CE-9DE3-00AA004BB851}"
          threadingModel = "Both"
             tlbid = "{44EC0535-400F-11D0-9DCD-00A0C90391D3}"/>
        <comClass description="Color Property Page"
    clsid="{0BE35201-8F91-11CE-9DE3-00AA004BB851}" 
    progid="ABC.Registrar"/>
    </file>

Si la clase COM es una clase OCX que requiere la subclave del Registro MiscStatus para especificar cómo crear y mostrar un objeto, puede habilitar el objeto duplicando esta información en el manifiesto del ensamblado. Especifique las características del objeto mediante los atributos miscStatus, miscStatusIcon, miscStatusContent, miscStatusDocprint y miscStatusThumbnail del elemento comClass . Establezca estos atributos en una lista separada por comas de valores de atributo de la tabla siguiente. Estos atributos duplican la información proporcionada por una enumeración DVASPECT. Si no se encuentra ningún valor para miscStatusIcon, miscStatusContent, miscStatusDocprint o miscStatusThumbnail, se usan los valores predeterminados especificados en miscStatus . Use valores de atributo de la tabla siguiente. Estas corresponden a las marcas de bits de una enumeración OLEMISC .

Valor del atributo OleMISC (constante)
recomposeonresize OLEMISC_RECOMPOSEONRESIZE
onlyiconic OLEMISC_ONLYICONIC
insertnotreplace OLEMISC_INSERTNOTREPLACE
static OLEMISC_STATIC
cantlinkinside OLEMISC_CANTLINKINSIDE
canlinkbyole1 OLEMISC_CANLINKBYOLE1
islinkobject OLEMISC_ISLINKOBJECT
Insideout OLEMISC_INSIDEOUT
activatewhenvisible OLEMISC_ACTIVATEWHENVISIBLE
renderingisdeviceindependent OLEMISC_RENDERINGISDEVICEINDEPENDENT
invisibleatruntime OLEMISC_INVISIBLEATRUNTIME
alwaysrun OLEMISC_ALWAYSRUN
actlikebutton OLEMISC_ACTSLIKEBUTTON
actlikelabel OLEMISC_ACTSLIKELABEL
nouiactivate OLEMISC_NOUIACTIVATE
alineable OLEMISC_ALIGNABLE
simpleframe OLEMISC_SIMPLEFRAME
setclientsitefirst OLEMISC_SETCLIENTSITEFIRST
Imemode TOLEMISC_IMEMODE
ignoreativatewhenvisible OLEMISC_IGNOREACTIVATEWHENVISIBLE
wantstomenumerge OLEMISC_WANTSTOMENUMERGE
supportsmultilevelundo OLEMISC_SUPPORTSMULTILEVELUNDO

Typelib

Subelemento de un elemento de archivo . Opcional.

El elemento typelib tiene los atributos que se muestran en la tabla siguiente.

Atributo Descripción
tlbid Id. único de la biblioteca de tipos. Necesario.
version Número de versión de dos partes de la biblioteca de tipos. Si solo aumenta el número de versión secundaria, todas las características de la biblioteca de tipos anterior se admiten de forma compatible. Si cambia el número de versión principal, se debe volver a compilar el código compilado en la biblioteca de tipos. El número de versión de la biblioteca de tipos puede diferir del número de versión de la aplicación. Necesario.
helpdir Directorio donde se encuentra el archivo de Ayuda para los tipos de la biblioteca de tipos. Si la aplicación admite bibliotecas de tipos para varios lenguajes, las bibliotecas pueden hacer referencia a nombres de archivo diferentes en el directorio del archivo de Ayuda. Si no hay ningún valor, especifique "". Necesario.
resourceid La representación hexadecimal en cadena del identificador de configuración regional (LCID). Es de uno a cuatro dígitos hexadecimales sin prefijo 0x y sin ceros iniciales. El LCID puede tener un identificador de sublanguaje neutro. Para obtener más información, consulte Identificadores de configuración regional. Opcional.
flags La representación en cadena de las banderas de la biblioteca de tipos para esta biblioteca de tipos. En concreto, debe ser "RESTRICTED", "CONTROL", "HIDDEN" y "HASDISKIMAGE". Estos son los valores de la enumeración LIBFLAGS y son las mismas marcas especificadas en el parámetro uLibFlags del método ICreateTypeLib::SetLibFlags . Opcional.

En el ejemplo siguiente se muestra un elemento typelib incluido en un elemento file .

<file name="sampleu.dll">
       <typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}"
       version="1.0" helpdir=""/>
</file>

comInterfaceExternalProxyStub

ComInterfaceExternalProxyStub es un subelemento de un elemento de ensamblado y se usa para interfaces de automatización. Por ejemplo, IDispatch y sus interfaces derivadas. Opcional.

La implementación predeterminada del código auxiliar de proxy es adecuada para la mayoría de las interfaces de automatización, como las interfaces derivadas de IDispatch. El código auxiliar del proxy de interfaz y todas las demás implementaciones externas de interfaz proxy-stub deben aparecer en comInterfaceExternalProxyStub. El elemento comInterfaceExternalProxyStub tiene los atributos que se muestran en la tabla siguiente.

Atributo Descripción
iid IID de la interfaz para la que se declara el proxy. Necesario. El valor debe tener el formato : "{iid}".
baseInterface IID de la interfaz desde la que se deriva el que describe el atributo iid . Este atributo es opcional. El valor debe tener el formato : "{iid}".
numMethods Número de métodos implementados por la interfaz. Este atributo es opcional. El valor debe tener el formato : "n".
name Nombre de la interfaz tal como aparecería en el código. Por ejemplo, "IViewObject". Esto no debe ser una cadena descriptiva. Este atributo es opcional. El valor debe tener el formato : "name".
tlbid Biblioteca de tipos que contiene la descripción de la interfaz especificada por el atributo iid . Este atributo es opcional. El valor debe tener el formato : "{tlbid}" .
proxyStubClsid32 Asigna un IID a un CLSID en archivos DLL de proxy de 32 bits.

En el ejemplo siguiente se muestra un elemento comInterfaceExternalProxyStub .

<comInterfaceExternalProxyStub 
  name="IAxWinAmbientDispatch" 
    iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" 
    numMethods="35" 
  baseInterface="{00000000-0000-0000-C000-000000000046}"/>

comInterfaceProxyStub

Subelemento de un elemento de archivo . Opcional.

Si un archivo del ensamblado implementa un código auxiliar de proxy, la etiqueta de archivo correspondiente debe incluir un subelemento comInterfaceProxyStub que tenga atributos idénticos a un elemento comInterfaceProxyStub . Es posible que la serialización de interfaces entre procesos y subprocesos no funcione según lo previsto si omite algunas de las dependencias comInterfaceProxyStub del componente.

El elemento comInterfaceProxyStub tiene los siguientes atributos.

Atributo Descripción
iid El. IID de la interfaz para la que se declara el proxy. Necesario. El valor debe tener el formato : "{iid}".
name Nombre de la interfaz tal como aparecería en el código. Por ejemplo, "IViewObject". Esto no debe ser una cadena descriptiva. Este atributo es opcional. El valor debe tener el formato : "name".
tlbid Biblioteca de tipos que contiene la descripción de la interfaz especificada por el atributo iid . Este atributo es opcional. El valor debe tener el formato : "{tlbid}".
baseInterface IiD de la interfaz desde la que se deriva el que describe el atributo iid . Este atributo es opcional. El valor debe tener el formato : "{iid}".
numMethods Número de métodos implementados por la interfaz. Este atributo es opcional. El valor debe tener el formato : "n".
proxyStubClsid32 Asigna un IID a un CLSID en archivos DLL de proxy de 32 bits.
threadingModel El modelo de subprocesos utilizado por las clases COM en proceso. Si esta propiedad es null, no se usa ningún modelo de subprocesos. El componente se crea en el subproceso principal del cliente y las llamadas de otros subprocesos se serializarán en este subproceso. Opcional. Los valores válidos son: "Apartment", "Free", "Both" y "Neutral".

windowclass

Nombre de una clase de Windows que se va a versionar. El elemento windowclass tiene el atributo siguiente.

Atributo Descripción
Versionado Este atributo controla si el nombre de clase de ventana interno usado en el registro contiene la versión del ensamblado que contiene la clase de ventana. El valor de este atributo puede ser "sí" o "no". El valor predeterminado es "sí". El valor "no" solo se debe usar si la misma clase de ventana está definida por un componente en paralelo y un componente no en paralelo equivalente y desea tratarlos como la misma clase de ventana. Tenga en cuenta que las reglas habituales sobre el registro de clases de ventana solo aplican el primer componente que registra la clase de ventana podrá registrarla, ya que no tiene versiones.

En el ejemplo siguiente se muestra un elemento windowclass incluido en un elemento file .

<file name="comctl32.dll">
        <windowClass versioned="no">ToolbarWindow32</windowClass>
</file>

Ejemplo

A continuación se muestra un ejemplo de un manifiesto de ensamblado.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
manifestVersion="1.0">
    <assemblyIdentity type="win32" name="Microsoft.Tools.SampleAssembly" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="0000000000000000"/>
    <file name="sampleu.dll" hash="3eab067f82504bf271ed38112a4ccdf46094eb5a" hashalg="SHA1">
        <comClass description="Font Property Page" clsid="{0BE35200-8F91-11CE-9DE3-00AA004BB851}"/>
        <comClass description="Color Property Page" clsid="{0BE35201-8F91-11CE-9DE3-00AA004BB851}"/>
        <comClass description="Picture Property Page" clsid="{0BE35202-8F91-11CE-9DE3-00AA004BB851}"/>
    </file>
    <file name="bar.dll" hash="ac72753e5bb20446d88a48c8f0aaae769a962338" hashalg="SHA1"/>
    <file name="foo.dll" hash="a7312a1f6cfb46433001e0540458de60adcd5ec5" hashalg="SHA1">
        <comClass description="Registrar Class" clsid="{44EC053A-400F-11D0-9DCD-00A0C90391D3}" progid="ATL.Registrar"/>
    <comInterfaceProxyStub iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" name=" IAxWinAmbientDispatch " tlbid="{34EC053A-400F-11D0-9DCD-00A0C90391D3}"/>
        <typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}" version="1.0" helpdir=""/>
    </file>
    <file name="sampledll.dll" hash="ba62960ceb15073d2598379307aad84f3a73dfcb" hashalg="SHA1"/>
<windowClass>ToolbarWindow32</windowClass>
        <windowClass>ComboBoxEx32</windowClass>
        <windowClass>sample_trackbar32</windowClass>
        <windowClass>sample_updown32</windowClass>
</assembly>