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.
Los manifiestos de ensamblado tienen los siguientes elementos y atributos.
Elemento
Atributos
Obligatorio
assembly
Sí
manifestVersion
Sí
noInheritable
No
assemblyIdentity
Sí
type
Sí
name
Sí
language
No
processorArchitecture
No
version
Sí
publicKeyToken
No
Dependencia
No
dependentAssembly
No
file
No
name
Sí
hashalg
No
hash
No
comClass
No
description
No
clsid
Sí
threadingModel
No
tlbid
No
progid
No
miscStatus
No
miscStatusIcon
No
miscStatusContent
No
miscStatusDocPrint
No
miscStatusThumbnail
No
typelib
No
tlbid
Sí
version
Sí
helpdir
Sí
resourceid
No
flags
No
comInterfaceExternalProxyStub
No
iid
Sí
baseInterface
No
numMethods
No
name
No
tlbid
No
proxyStubClsid32
No
comInterfaceProxyStub
No
iid
Sí
name
Sí
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 .
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 .
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 .
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 .
Los desarrolladores de Windows tienen varias opciones para crear aplicaciones que se ejecutan en Windows. En este módulo se presentan los marcos de interfaz de usuario de Windows que están disponibles para el desarrollo de Windows. También proporciona instrucciones sobre cómo elegir el mejor marco para la aplicación.