Manifestes d’assembly

Un manifeste d’assembly est un fichier XML qui décrit un assembly côte à côte. Les manifestes d’assembly décrivent les noms et les versions des assemblys côte à côte, des fichiers et des ressources de l’assembly, ainsi que la dépendance de l’assembly à d’autres assemblys côte à côte. L’installation, l’activation et l’exécution correctes des assemblys côte à côte nécessitent que le manifeste d’assembly accompagne toujours un assembly sur le système.

Pour obtenir une liste complète du schéma XML, consultez Schéma de fichier manifeste.

Les manifestes d’assembly ont les éléments et attributs suivants.

Élément Attributs Obligatoire
Assemblée Oui
manifestVersion Oui
noInheritable Non
assemblyIdentity Oui
type Oui
name Oui
language Non
processorArchitecture Non
version Oui
Publickeytoken Non
Dépendance Non
dependentAssembly Non
file Non
name Oui
hashalg Non
hash Non
comClass Non
description Non
Clsid Oui
threadingModel Non
tlbid Non
Progid Non
miscStatus Non
miscStatusIcon Non
miscStatusContent Non
miscStatusDocPrint Non
miscStatusThumbnail Non
typelib Non
tlbid Oui
version Oui
helpdir Oui
resourceid Non
flags Non
comInterfaceExternalProxyStub Non
Iid Oui
baseInterface Non
numMethods Non
name Non
tlbid Non
proxyStubClsid32 Non
comInterfaceProxyStub Non
Iid Oui
name Oui
tlbid Non
baseInterface Non
numMethods Non
proxyStubClsid32 Non
threadingModel Non
windowClass Non
Versionnés Non

Emplacement du fichier

Les manifestes d’assembly peuvent être installés à trois emplacements :

  • En tant que manifestes qui accompagnent des assemblys partagés, les manifestes d’assembly doivent être installés en tant que fichier distinct dans le cache d’assembly côte à côte. Il s’agit généralement du dossier WinSxS dans le répertoire Windows.
  • En tant que manifestes qui accompagnent les assemblys privés, les manifestes d’assembly doivent être installés dans la structure de répertoires de l’application. Il s’agit généralement d’un fichier distinct dans le même dossier que le fichier exécutable de l’application.
  • En tant que ressource dans une DLL, l’assembly est disponible pour l’utilisation privée de la DLL. Un manifeste d’assembly ne peut pas être inclus en tant que ressource dans un EXE. Un fichier EXE peut inclure un manifeste d’application en tant que ressource.

Syntaxe du nom de fichier

Le nom d’un manifeste d’assembly est n’importe quel nom de fichier valide suivi de .manifest.

Par exemple, un manifeste d’assembly qui fait référence à myassembly utilise la syntaxe de nom de fichier suivante : myassembly.<resource ID>.manifest. Vous pouvez omettre le <resource ID> champ si le manifeste d’assembly est installé en tant que fichier distinct ou si l’ID de ressource est 1.

Notes

En raison de la façon dont les recherches côte à côte pour les assemblys privés, les restrictions de nommage suivantes s’appliquent lors de l’empaquetage d’une DLL en tant qu’assembly privé. Une méthode recommandée consiste à placer le manifeste d’assembly dans la DLL en tant que ressource. Dans ce cas, l’ID de ressource doit être égal à 1 et le nom de l’assembly privé peut être identique au nom de la DLL. Par exemple, si le nom de la DLL est Microsoft.Windows.mysample.dll, la valeur de l’attribut name utilisé dans l’élément assemblyIdentity du manifeste peut également être Microsoft.Windows.mysample. Une autre méthode consiste à placer le manifeste d’assembly dans un fichier distinct. Dans ce cas, le nom de l’assembly et son manifeste doivent être différents du nom de la DLL. Par exemple, Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest et Microsoft.Windows.Mysample.dll. Pour plus d’informations sur la façon dont les recherches côte à côte pour les assemblys privés, consultez Séquence de recherche d’assemblys.

Éléments

Les noms des éléments et des attributs respectent la casse. Les valeurs des éléments et des attributs ne respectent pas la casse, à l’exception de la valeur de l’attribut de type.

Assemblée

Élément conteneur. Son premier sous-élément doit être un élément assemblyIdentity ou noInheritable . Le manifeste d’assembly décrit de manière unique l’assembly côte à côte identifié par l’assemblyIdentity. Obligatoire.

L’élément assembly doit se trouver dans l’espace de noms « urn:schemas-microsoft-com:asm.v1 ». Les éléments enfants de l’assembly doivent également se trouver dans cet espace de noms, par héritage ou par balisage.

L’élément assembly a l’attribut suivant.

Attribut Description
manifestVersion L’attribut manifestVersion doit être défini sur 1.0.

noInheritable

Incluez cet élément dans un manifeste d’assembly pour indiquer que l’assembly gère les contextes d’activation et ses objets. L’élément noInheritable doit être un sous-élément d’un élément assembly. L’élément assemblyIdentity doit se trouver après tout élément noInheritable. L’élément noInheritable est requis dans le manifeste d’assembly si l’assembly est utilisé par les manifestes d’application qui incluent l’élément noInherit . Un élément noInheritable dans un manifeste d’application n’a aucun effet. Un élément noInheritable n’a pas d’éléments enfants.

assemblyIdentity

Décrit et identifie de manière unique un assembly côte à côte.

En tant que premier sous-élément d’un élément d’assembly , assemblyIdentity décrit et identifie de manière unique l’assembly côte à côte qui possède ce manifeste d’assembly. Il s’agit de l’assembly de contexte DEFIdentity du manifeste d’assembly.

En tant que premier sous-élément d’un élément dependentAssembly, assemblyIdentity décrit et identifie de manière unique un assembly côte à côte utilisé par l’assembly de contexte DEFIdentity. Il s’agit d’un assembly de contexte REFIdentity du manifeste de l’assembly. L’assembly de contexte DEF nécessite que l’assembly de contexte REF fonctionne correctement. Notez que chaque assembly de contexte REFIdentity doit correspondre exactement à un assembly de contexte DEF correspondantIdentity dans le propre manifeste d’assembly de l’assembly référencé.

Cet élément n’a aucun sous-élément. L’élément assemblyIdentity a les attributs suivants.

Attribut Description
type Spécifie le type d’assembly. La valeur doit être win32 et en minuscules. Obligatoire.
name Nomme de manière unique l’assembly. Utilisez le format suivant pour le nom de l’assembly : Organization.Division.Name. Par exemple, Microsoft.Windows.mysampleAsm. Obligatoire. Notez que dans le cas d’une DLL empaquetée en tant qu’assembly privé avec un fichier manifeste distinct, le nom de l’assembly doit être différent du nom de la DLL et du manifeste.
language Identifie la langue de l’assembly. facultatif. Si l’assembly est spécifique à la langue, spécifiez le code de langage DHTML. Dans l’assembly de contexte DEFIdentity d’un manifeste d’assembly destiné à une utilisation mondiale (langue neutre), omettez l’attribut language.
Dans un assembly de contexte REFIdentity d’un manifeste d’assembly destiné à une utilisation mondiale (langue neutre), définissez la valeur de language sur « * ».
processorArchitecture Spécifie le processeur. Les valeurs valides sont x86 pour Windows 32 bits et ia64 pour Windows 64 bits. facultatif.
version Spécifie la version de l’assembly. Utilisez le format de version en quatre parties : mmmmm.nnnnn.ooooo.ppppp. Chacune des parties séparées par des périodes peut être comprise entre 0 et 65535 inclus. Pour plus d’informations, consultez Versions d’assembly. Obligatoire.
Publickeytoken Chaîne hexadécimale de 16 caractères représentant les 8 derniers octets du hachage SHA-1 de la clé publique sous laquelle l’assembly est signé. La clé publique utilisée pour signer le catalogue doit être supérieure ou égale à 2 048 bits. Obligatoire pour les assemblys côte à côte partagés.

Dépendance

Élément conteneur comprenant au moins une dépendanceAssembly. Le premier sous-élément doit être un élément dependentAssembly . Une dépendance n’a pas d’attributs. facultatif.

dependentAssembly

Le premier sous-élément doit être un élément assemblyIdentity qui décrit et identifie de manière unique un assembly côte à côte utilisé par l’assembly côte à côte qui possède ce manifeste d’assembly. Chaque dependentAssembly doit se trouver à l’intérieur d’une seule dépendance. facultatif.

Fichier

Contient les fichiers utilisés par un assembly côte à côte. Contient des sous-éléments comClass, typelib, windowClass, comInterfaceProxyStub . facultatif.

L’élément file a les attributs suivants.

Attribut Description
name Nom du fichier, par exemple, Conctl32.dll.
hashalg Algorithme utilisé pour créer un hachage du fichier. Cette valeur doit être SHA1.
hash Hachage du fichier référencé par son nom. Chaîne hexadécimale de longueur en fonction de l’algorithme de hachage.

comClass

Sous-élément d’un élément file . facultatif.

L’élément comClass a les attributs suivants.

Attribut Description
description Nom de la classe.
Clsid GUID qui identifie de manière unique la classe. Obligatoire. La valeur doit être au format d’un GUID valide.
threadingModel Modèle de thread utilisé par les classes COM in-process. Si cette propriété a la valeur Null, aucun modèle de thread n’est utilisé. Le composant est créé sur le thread principal du client et les appels provenant d’autres threads sont marshalés sur ce thread. facultatif. Les valeurs valides sont « Apartment », « Free », « Both » et « Neutral ».
tlbid GUID de la bibliothèque de types pour ce composant COM. La valeur doit être au format d’un GUID. facultatif.
Progid Identificateur programmatique dépendant de la version qui est associé au composant COM. Le format d’un ProgID est <fournisseur>.<composant>.<version>.
miscStatus Les doublons dans l’assembly manifestent les informations fournies par la clé de Registre MiscStatus. Si les valeurs des attributs miscStatusIcon, miscStatusContent, miscStatusDocprint ou miscStatusThumbnail sont introuvables, la valeur par défaut correspondante répertoriée dans miscStatus est utilisée pour les attributs manquants. La valeur peut être une liste délimitée par des virgules des valeurs d’attribut du tableau ci-dessous. Vous pouvez utiliser cet attribut si la classe COM est une classe OCX qui nécessite des valeurs de clé de Registre Miscstatus.
miscStatusIcon Duplique dans le manifeste de l’assembly les informations fournies par DVASPECT_ICON. Il peut fournir une icône d’un objet. La valeur peut être une liste délimitée par des virgules des valeurs d’attribut du tableau ci-dessous. Vous pouvez utiliser cet attribut si la classe COM est une classe OCX qui nécessite des valeurs de clé de Registre Miscstatus.
miscStatusContent Duplique dans le manifeste de l’assembly les informations fournies par DVASPECT_CONTENT. Il peut fournir un document composé affichable à l’écran ou imprimable sur une imprimante. La valeur peut être une liste délimitée par des virgules des valeurs d’attribut du tableau ci-dessous. Vous pouvez utiliser cet attribut si la classe COM est une classe OCX qui nécessite des valeurs de clé de Registre Miscstatus.
miscStatusDocprint Duplique dans le manifeste de l’assembly les informations fournies par DVASPECT_DOCPRINT. Il peut fournir une représentation d’objet pouvant être affichée à l’écran comme si elle était imprimée sur une imprimante. La valeur peut être une liste délimitée par des virgules des valeurs d’attribut du tableau ci-dessous. Vous pouvez utiliser cet attribut si la classe COM est une classe OCX qui nécessite des valeurs de clé de Registre Miscstatus.
miscStatusThumbnail Duplique dans le manifeste de l’assembly les informations fournies par DVASPECT_THUMBNAIL. Il peut fournir une miniature d’un objet affichable dans un outil de navigation. La valeur peut être une liste délimitée par des virgules des valeurs d’attribut du tableau ci-dessous. Vous pouvez utiliser cet attribut si la classe COM est une classe OCX qui nécessite des valeurs de clé de Registre Miscstatus.

L’élément comClass peut avoir <des éléments progid>... en tant qu’enfants, qui répertorient les progids dépendant de la version.

L’exemple suivant montre un élément comClass inclus dans un élément 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 votre classe COM est une classe OCX qui nécessite la sous-clé de Registre MiscStatus pour spécifier comment créer et afficher un objet, vous pouvez activer l’objet en dupliquant ces informations dans le manifeste de l’assembly. Spécifiez les caractéristiques de l’objet à l’aide des attributs miscStatus, miscStatusIcon, miscStatusContent, miscStatusDocprint et miscStatusThumbnail de l’élément comClass . Définissez ces attributs sur une liste de valeurs d’attribut séparées par des virgules dans le tableau suivant. Ces attributs dupliquent les informations qui seraient fournies par une énumération DVASPECT. Si aucune valeur n’est trouvée pour miscStatusIcon, miscStatusContent, miscStatusDocprint ou miscStatusThumbnail, les valeurs par défaut spécifiées dans miscStatus sont utilisées. Utilisez les valeurs d’attribut du tableau suivant. Ceux-ci correspondent aux indicateurs de bits d’une énumération OLEMISC .

Valeur d'attribut 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
actslikebutton OLEMISC_ACTSLIKEBUTTON
actslikelabel OLEMISC_ACTSLIKELABEL
nouiactivate OLEMISC_NOUIACTIVATE
alignable OLEMISC_ALIGNABLE
simpleframe OLEMISC_SIMPLEFRAME
setclientsitefirst OLEMISC_SETCLIENTSITEFIRST
imemode TOLEMISC_IMEMODE
ignoreativatewhenvisible OLEMISC_IGNOREACTIVATEWHENVISIBLE
wantstomenumerge OLEMISC_WANTSTOMENUMERGE
supportsmultilevelundo OLEMISC_SUPPORTSMULTILEVELUNDO

Typelib

Sous-élément d’un élément file . facultatif.

L’élément typelib a les attributs indiqués dans le tableau suivant.

Attribut Description
tlbid ID unique de la bibliothèque de types. Obligatoire.
version Numéro de version en deux parties de la bibliothèque de types. Si seul le numéro de version secondaire augmente, toutes les fonctionnalités de la bibliothèque de types précédente sont prises en charge de manière compatible. Si le numéro de version principale change, le code compilé par rapport à la bibliothèque de types doit être recompilé. Le numéro de version de la bibliothèque de types peut différer du numéro de version de l’application. Obligatoire.
helpdir Répertoire où se trouve le fichier d’aide des types dans la bibliothèque de types. Si l’application prend en charge les bibliothèques de types pour plusieurs langues, les bibliothèques peuvent faire référence à différents noms de fichiers dans le répertoire de fichiers d’aide. Si aucune valeur n’est définie, spécifiez « ». Obligatoire.
resourceid Représentation sous forme de chaîne hexadécimale de l’identificateur de paramètres régionaux (LCID). Il s’agit de un à quatre chiffres hexadécimaux sans préfixe 0x et aucun zéro non significatif. L’identificateur LCID peut avoir un identificateur indépendant de la sous-langue. Pour plus d’informations, consultez Identificateurs de paramètres régionaux. facultatif.
flags Représentation sous forme de chaîne des indicateurs pour cette bibliothèque de types. Plus précisément, cela doit être l’une de ces valeurs : « RESTRICTED », « CONTROL », « HIDDEN » et « HASDISKIMAGE ». Il s’agit des valeurs de l’énumération LIBFLAGS et des mêmes indicateurs spécifiés dans le paramètre uLibFlags de la méthode ICreateTypeLib::SetLibFlags . facultatif.

L’exemple suivant montre un élément typelib inclus dans un élément file .

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

comInterfaceExternalProxyStub

ComInterfaceExternalProxyStub est un sous-élément d’un élément d’assembly et est utilisé pour les interfaces d’automatisation. Par exemple, IDispatch et ses interfaces dérivées. facultatif.

L’implémentation proxy-stub par défaut est adéquate pour la plupart des interfaces d’automatisation, telles que les interfaces dérivées d’IDispatch. Le stub du proxy d’interface et toutes les autres implémentations d’interface proxy-stub externes doivent être répertoriés dans comInterfaceExternalProxyStub. L’élément comInterfaceExternalProxyStub a les attributs indiqués dans le tableau suivant.

Attribut Description
Iid IID de l’interface pour laquelle le proxy est déclaré. Obligatoire. La valeur doit être au format : « {iid} ».
baseInterface IID de l’interface à partir de laquelle est dérivé celui décrit par l’attribut iid . Cet attribut est facultatif. La valeur doit être au format : « {iid} ».
numMethods Nombre de méthodes implémentées par l’interface. Cet attribut est facultatif. La valeur doit être au format « n ».
name Nom de l’interface telle qu’elle apparaît dans le code. Par exemple, « IViewObject ». Il ne doit pas s’agir d’une chaîne descriptive. Cet attribut est facultatif. La valeur doit être au format : « name ».
tlbid Bibliothèque de types qui contient la description de l’interface spécifiée par l’attribut iid . Cet attribut est facultatif. La valeur doit être au format : « {tlbid} ».
proxyStubClsid32 Mappe un IID à un CLSID dans des DLL proxy 32 bits.

L’exemple suivant montre un élément comInterfaceExternalProxyStub .

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

comInterfaceProxyStub

Sous-élément d’un élément file . facultatif.

Si un fichier de l’assembly implémente un stub proxy, la balise de fichier correspondante doit inclure un sous-élément comInterfaceProxyStub ayant des attributs identiques à un élément comInterfaceProxyStub . Le marshaling des interfaces entre les processus et les threads peut ne pas fonctionner comme prévu si vous omettez certaines des dépendances comInterfaceProxyStub pour votre composant.

L’élément comInterfaceProxyStub a les attributs suivants.

Attribut Description
Iid Lla. IID de l’interface pour laquelle le proxy est déclaré. Obligatoire. La valeur doit être au format : « {iid} ».
name Nom de l’interface telle qu’elle apparaît dans le code. Par exemple, « IViewObject ». Il ne doit pas s’agir d’une chaîne descriptive. Cet attribut est facultatif. La valeur doit être au format : « name ».
tlbid Bibliothèque de types qui contient la description de l’interface spécifiée par l’attribut iid . Cet attribut est facultatif. La valeur doit être au format : « {tlbid} ».
baseInterface IID de l’interface à partir de laquelle est dérivé celui décrit par l’attribut iid . Cet attribut est facultatif. La valeur doit être au format : « {iid} ».
numMethods Nombre de méthodes implémentées par l’interface. Cet attribut est facultatif. La valeur doit être au format « n ».
proxyStubClsid32 Mappe un IID à un CLSID dans des DLL proxy 32 bits.
threadingModel Modèle de thread utilisé par les classes COM in-process. Si cette propriété a la valeur Null, aucun modèle de thread n’est utilisé. Le composant est créé sur le thread principal du client et les appels provenant d’autres threads sont marshalés sur ce thread. facultatif. Les valeurs valides sont « Apartment », « Free », « Both » et « Neutral ».

windowclass

Nom d’une classe Windows qui doit être versionnée. L’élément windowclass a l’attribut suivant.

Attribut Description
Versionnés Cet attribut contrôle si le nom de classe de fenêtre interne utilisé dans l’inscription contient ou non la version de l’assembly contenant la classe de fenêtre. La valeur de cet attribut peut être « yes » ou « no ». La valeur par défaut est « yes ». La valeur « non » ne doit être utilisée que si la même classe de fenêtre est définie par un composant côte à côte et un composant non côte à côte équivalent et que vous souhaitez les traiter comme la même classe de fenêtre. Notez que les règles habituelles relatives à l’inscription de classe de fenêtre s’appliquent uniquement au premier composant qui inscrit la classe de fenêtre sera en mesure de l’inscrire, car il n’est pas versionné.

L’exemple suivant montre un élément windowclass inclus dans un élément file .

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

Exemple

Voici un exemple de manifeste d’assembly.

<?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>