Manifesti dell'assembly

Un manifesto dell'assembly è un file XML che descrive un assembly side-by-side. I manifesti dell'assembly descrivono i nomi e le versioni degli assembly side-by-side, dei file e delle risorse dell'assembly, nonché la dipendenza dell'assembly in altri assembly side-by-side. L'installazione, l'attivazione e l'esecuzione corretti degli assembly side-by-side richiedono che il manifesto dell'assembly sia sempre accompagnato da un assembly nel sistema.

Per un elenco completo dello schema XML, vedere Schema file manifesto.

I manifesti dell'assembly hanno gli elementi e gli attributi seguenti.

Elemento Attributi Necessario
Assemblea
manifestVersion
noInheritable No
Assemblyidentity
type
nome
language No
processorArchitecture No
version
Publickeytoken No
Dipendenza No
dependentAssembly No
file No
nome
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
nome No
tlbid No
proxyStubClsid32 No
comInterfaceProxyStub No
Iid
nome
tlbid No
baseInterface No
numMethods No
proxyStubClsid32 No
Threadingmodel No
windowClass No
controllo delle versioni No

Percorso file

I manifesti degli assembly possono essere installati in tre percorsi:

  • Come manifesti che accompagnano assembly condivisi, i manifesti dell'assembly devono essere installati come file separato nella cache degli assembly side-by-side. Si tratta in genere della cartella WinSxS nella directory di Windows.
  • Come manifesti che accompagnano assembly privati, i manifesti dell'assembly devono essere installati nella struttura di directory dell'applicazione. Si tratta in genere di un file separato nella stessa cartella del file eseguibile dell'applicazione.
  • Come risorsa in una DLL, l'assembly è disponibile per l'uso privato della DLL. Un manifesto dell'assembly non può essere incluso come risorsa in un file EXE. Un file EXE può includere un manifesto dell'applicazione come risorsa.

Sintassi del nome file

Il nome di un manifesto dell'assembly è qualsiasi nome di file valido seguito da .manifest.

Ad esempio, un manifesto dell'assembly che fa riferimento a myassembly usa la sintassi del nome file seguente: myassembly.<resource ID>.manifest. È possibile omettere il <resource ID> campo se il manifesto dell'assembly viene installato come file separato o se l'ID risorsa è 1.

Nota

A causa della ricerca side-by-side di assembly privati, vengono applicate le restrizioni di denominazione seguenti quando si crea il pacchetto di una DLL come assembly privato. Un modo consigliato per eseguire questa operazione consiste nell'inserire il manifesto dell'assembly nella DLL come risorsa. In questo caso, l'ID risorsa deve essere uguale a 1 e il nome dell'assembly privato può essere uguale al nome della DLL. Ad esempio, se il nome della DLL è Microsoft.Windows.mysample.dll, il valore dell'attributo name usato nell'elemento assemblyIdentity del manifesto può anche essere Microsoft.Windows.mysample. Un modo alternativo consiste nell'inserire il manifesto dell'assembly in un file separato. In questo caso, il nome dell'assembly e il relativo manifesto devono essere diversi dal nome della DLL. Ad esempio, Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest e Microsoft.Windows.Mysample.dll. Per altre informazioni sulla ricerca side-by-side di assembly privati, vedere Sequenza di ricerca di assembly.

Elementi

I nomi di elementi e attributi fanno distinzione tra maiuscole e minuscole. I valori di elementi e attributi non fanno distinzione tra maiuscole e minuscole, ad eccezione del valore dell'attributo type.

Assemblea

Elemento contenitore. Il primo sottoelemento deve essere un elemento assemblyIdentity o noInheritable . Il manifesto dell'assembly descrive in modo univoco l'assembly side-by-side identificato dall'assemblyIdentity. Obbligatorio.

L'elemento assembly deve trovarsi nello spazio dei nomi "urn:schemas-microsoft-com:asm.v1". Anche gli elementi figlio dell'assembly devono trovarsi in questo spazio dei nomi, tramite ereditarietà o assegnazione di tag.

L'elemento assembly ha l'attributo seguente.

Attributo Descrizione
manifestVersion L'attributo manifestVersion deve essere impostato su 1.0.

noInheritable

Includere questo elemento in un manifesto dell'assembly per indicare che l'assembly gestisce i contesti di attivazione e i relativi oggetti. L'elemento noInheritable deve essere un sottoelemento di un elemento assembly . L'elemento assemblyIdentity deve venire dopo qualsiasi elemento noInheritable . L'elemento noInheritable è necessario nel manifesto dell'assembly se l'assembly viene usato da tutti i manifesti dell'applicazione che includono l'elemento noInherit . Un elemento noInheritable in un manifesto dell'applicazione non ha alcun effetto. Un elemento noInheritable non dispone di elementi figlio.

Assemblyidentity

Descrive e identifica in modo univoco un assembly side-by-side.

Come primo sottoelemento di un elemento assembly , assemblyIdentity descrive e identifica in modo univoco l'assembly side-by-side proprietario del manifesto dell'assembly. Viene chiamato assembly def-contextIdentity del manifesto dell'assembly.

Come primo sottoelemento di un elemento dependentAssembly , assemblyIdentity descrive e identifica in modo univoco un assembly side-by-side utilizzato dall'assembly del contesto DEFIdentity. Si tratta di un assembly di contesto REFIdentity del manifesto dell'assembly. L'assembly di contesto DEF richiede che l'assembly di contesto REF funzioni correttamente. Si noti che ogni assembly di contesto REFIdentity deve corrispondere esattamente a un assembly def-contextIdentity corrispondente nel manifesto dell'assembly a cui si fa riferimento.

Questo elemento non ha sottoelementi. L'elemento assemblyIdentity ha gli attributi seguenti.

Attributo Descrizione
type Specifica il tipo di assembly. Il valore deve essere win32 e in lettere minuscole. Obbligatorio.
nome Assegna un nome univoco all'assembly. Usare il formato seguente per il nome dell'assembly: Organization.Division.Name. Ad esempio, Microsoft.Windows.mysampleAsm. Obbligatorio. Si noti che nel caso di una DLL in pacchetto come assembly privato con un file manifesto separato, il nome dell'assembly deve essere diverso dal nome della DLL e del manifesto.
language Identifica la lingua dell'assembly. Facoltativa. Se l'assembly è specifico del linguaggio, specificare il codice del linguaggio DHTML. Nell'assembly def-contextIdentity di un manifesto dell'assembly destinato all'uso globale (indipendente dalla lingua) omettere l'attributo language.
In un assembly di contesto REFIdentity di un manifesto dell'assembly destinato all'uso globale (indipendente dalla lingua) impostare il valore della lingua su "*".
processorArchitecture Specifica il processore. I valori validi sono x86 per Windows a 32 bit e ia64 per Windows a 64 bit. Facoltativa.
version Specifica la versione dell'assembly. Usare il formato di versione in quattro parti: mmmmm.nnnnn.ooooo.ppppp. Ognuna delle parti separate da periodi può essere compresa tra 0 e 65535 inclusi. Per altre informazioni, vedere Versioni assembly. Obbligatorio.
Publickeytoken Stringa esadecimale di 16 caratteri che rappresenta gli ultimi 8 byte dell'hash SHA-1 della chiave pubblica in cui è firmato l'assembly. La chiave pubblica usata per firmare il catalogo deve essere di 2048 bit o superiore. Obbligatorio per gli assembly side-by-side condivisi.

Dipendenza

Elemento contenitore che include almeno un dependentAssembly. Il primo sottoelemento deve essere un elemento dependentAssembly . Una dipendenza non ha attributi. Facoltativa.

dependentAssembly

Il primo sottoelemento deve essere un elemento assemblyIdentity che descrive e identifica in modo univoco un assembly side-by-side utilizzato dall'assembly side-by-side proprietario del manifesto dell'assembly. Ogni dependentAssembly deve trovarsi all'interno di una sola dipendenza. Facoltativa.

File

Contiene i file utilizzati da un assembly side-by-side. Contiene sottoelementi comClass, typelib, windowClass, comInterfaceProxyStub . Facoltativa.

L'elemento file ha gli attributi seguenti.

Attributo Descrizione
nome Nome del file, ad esempio, Conctl32.dll.
hashalg Algoritmo utilizzato per creare un hash del file. Questo valore deve essere SHA1.
hash Hash del file a cui fa riferimento il nome. Stringa esadecimale di lunghezza a seconda dell'algoritmo hash.

comClass

Sottoelemento di un elemento file . Facoltativa.

L'elemento comClass ha gli attributi seguenti.

Attributo Descrizione
description Nome classe.
Clsid GUID che identifica in modo univoco la classe . Obbligatorio. Il valore deve essere nel formato di un GUID valido.
Threadingmodel Modello di threading usato dalle classi COM in-process. Se questa proprietà è Null, non viene usato alcun modello di threading. Il componente viene creato nel thread principale del client e le chiamate da altri thread vengono sottoposto a marshalling a questo thread. Facoltativa. I valori validi sono: "Apartment", "Free", "Both" e "Neutral".
tlbid GUID per la libreria dei tipi per questo componente COM. Il valore deve essere nel formato di un GUID. Facoltativa.
Progid Identificatore programmatico dipendente dalla versione associato al componente COM. Il formato di un ProgID è <fornitore>.<componente>.<versione>.
miscStatus Duplicati nel manifesto dell'assembly le informazioni fornite dalla chiave del Registro di sistema MiscStatus. Se i valori per gli attributi miscStatusIcon, miscStatusContent, miscStatusDocprint o miscStatusThumbnail non vengono trovati, per gli attributi mancanti viene usato il valore predefinito corrispondente elencato in miscStatus . Il valore può essere un elenco delimitato da virgole dei valori degli attributi della tabella seguente. È possibile utilizzare questo attributo se la classe COM è una classe OCX che richiede valori di chiave del Registro di sistema Miscstatus.
miscStatusIcon Duplicati nel manifesto dell'assembly le informazioni fornite da DVASPECT_ICON. Può fornire un'icona di un oggetto . Il valore può essere un elenco delimitato da virgole dei valori degli attributi della tabella seguente. È possibile utilizzare questo attributo se la classe COM è una classe OCX che richiede valori di chiave del Registro di sistema Miscstatus.
miscStatusContent Duplicati nel manifesto dell'assembly le informazioni fornite da DVASPECT_CONTENT. Può fornire un documento composto visualizzabile per uno schermo o una stampante. Il valore può essere un elenco delimitato da virgole dei valori degli attributi della tabella seguente. È possibile utilizzare questo attributo se la classe COM è una classe OCX che richiede valori di chiave del Registro di sistema Miscstatus.
miscStatusDocprint Duplicati nel manifesto dell'assembly le informazioni fornite da DVASPECT_DOCPRINT. Può fornire una rappresentazione dell'oggetto visualizzabile sullo schermo come se stampata su una stampante. Il valore può essere un elenco delimitato da virgole dei valori degli attributi della tabella seguente. È possibile utilizzare questo attributo se la classe COM è una classe OCX che richiede valori di chiave del Registro di sistema Miscstatus.
miscStatusThumbnail Duplicati in un manifesto dell'assembly le informazioni fornite da DVASPECT_THUMBNAIL. Può fornire un'anteprima di un oggetto visualizzabile in uno strumento di esplorazione. Il valore può essere un elenco delimitato da virgole dei valori degli attributi della tabella seguente. È possibile utilizzare questo attributo se la classe COM è una classe OCX che richiede valori di chiave del Registro di sistema Miscstatus.

L'elemento comClass può avere <elementi progid>... come elementi figlio, che elencano i progid dipendenti dalla versione.

Nell'esempio seguente viene illustrato un elemento comClass incluso in 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>

Se la classe COM è una classe OCX che richiede la sottochiave del Registro di sistema MiscStatus per specificare come creare e visualizzare un oggetto, è possibile abilitare l'oggetto duplicando queste informazioni nel manifesto dell'assembly. Specificare le caratteristiche dell'oggetto usando gli attributi miscStatus, miscStatusIcon, miscStatusContent, miscStatusDocprint e miscStatusThumbnail dell'elemento comClass . Impostare questi attributi su un elenco delimitato da virgole di valori di attributo della tabella seguente. Questi attributi duplicano le informazioni che verrebbero fornite da un'enumerazione DVASPECT. Se non viene trovato alcun valore per miscStatusIcon, miscStatusContent, miscStatusDocprint o miscStatusThumbnail, vengono usati i valori predefiniti specificati in miscStatus . Usare i valori degli attributi della tabella seguente. Corrispondono ai flag di bit di un'enumerazione OLEMISC .

Valore dell'attributo Costante OLEMISC
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
allineato OLEMISC_ALIGNABLE
simpleframe OLEMISC_SIMPLEFRAME
setclientsitefirst OLEMISC_SETCLIENTSITEFIRST
Imemode TOLEMISC_IMEMODE
ignoreativatewhenvisible OLEMISC_IGNOREACTIVATEWHENVISIBLE
wantstomenumerge OLEMISC_WANTSTOMENUMERGE
supportmultilevelundo OLEMISC_SUPPORTSMULTILEVELUNDO

Typelib

Un sottoelemento di un elemento file . Facoltativa.

L'elemento typelib ha gli attributi visualizzati nella tabella seguente.

Attributo Descrizione
tlbid ID univoco della libreria dei tipi. Obbligatorio.
version Numero di versione in due parti della libreria dei tipi. Se aumenta solo il numero di versione secondaria, tutte le funzionalità della libreria di tipi precedenti sono supportate in modo compatibile. Se il numero di versione principale cambia, il codice compilato nella libreria dei tipi deve essere ricompilato. Il numero di versione della libreria dei tipi può essere diverso dal numero di versione dell'applicazione. Obbligatorio.
helpdir Directory in cui si trova il file della Guida per i tipi nella libreria dei tipi. Se l'applicazione supporta librerie di tipi per più lingue, le librerie possono fare riferimento a nomi di file diversi nella directory file della Guida. Se non esiste alcun valore, specificare "". Obbligatorio.
Resourceid Rappresentazione della stringa esadecimale dell'identificatore delle impostazioni locali (LCID). È uno a quattro cifre esadecimali senza prefisso 0x e zero iniziali. LCID può avere un identificatore di sottolanguage neutrale. Per altre informazioni, vedere Identificatori delle impostazioni locali. Facoltativa.
flags Rappresentazione stringa dei flag di libreria dei tipi per questa libreria di tipi. In particolare, deve essere uno di "RESTRICTED", "CONTROL", "HIDDEN" e "HASDISKIMAGE". Questi sono i valori dell'enumerazione LIBFLAGS e sono gli stessi flag specificati nel parametro uLibFlags del metodo ICreateTypeLib::SetLibFlags . Facoltativa.

Nell'esempio seguente viene illustrato un elemento typelib incluso in un elemento file .

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

comInterfaceExternalProxyStub

ComInterfaceExternalProxyStub è un sottoelemento di un elemento assembly e viene usato per le interfacce di automazione. Ad esempio, IDispatch e le relative interfacce derivate. Facoltativa.

L'implementazione predefinita di proxy-stub è adeguata per la maggior parte delle interfacce di automazione, ad esempio le interfacce derivate da IDispatch. L'interfaccia proxy stub e tutte le altre implementazioni dell'interfaccia proxy-stub esterne devono essere elencate nel comInterfaceExternalProxyStub. L'elemento comInterfaceExternalProxyStub ha gli attributi illustrati nella tabella seguente.

Attributo Descrizione
Iid Id dell'interfaccia per cui viene dichiarato il proxy. Obbligatorio. Il valore deve essere nel formato "{iid}".
baseInterface Id dell'interfaccia da cui deriva quello descritto dall'attributo iid . Questo attributo è facoltativo. Il valore deve essere nel formato "{iid}".
numMethods Numero di metodi implementati dall'interfaccia. Questo attributo è facoltativo. Il valore deve essere nel formato "n".
nome Nome dell'interfaccia come appare nel codice. Ad esempio, "IViewObject". Non deve essere una stringa descrittiva. Questo attributo è facoltativo. Il valore deve essere nel formato "name".
tlbid Libreria dei tipi contenente la descrizione dell'interfaccia specificata dall'attributo iid . Questo attributo è facoltativo. Il valore deve essere nel formato : "{tlbid}" .
proxyStubClsid32 Esegue il mapping di un IID a un CLSID in DLL proxy a 32 bit.

Nell'esempio seguente viene illustrato un elemento comInterfaceExternalProxyStub .

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

comInterfaceProxyStub

Un sottoelemento di un elemento file . Facoltativa.

Se un file nell'assembly implementa uno stub proxy, il tag di file corrispondente deve includere un sottoelemento comInterfaceProxyStub con attributi identici a un elemento comInterfaceProxyStub . Le interfacce di marshalling tra processi e thread potrebbero non funzionare come previsto se si omette alcune delle dipendenze comInterfaceProxyStub per il componente.

L'elemento comInterfaceProxyStub ha gli attributi seguenti.

Attributo Descrizione
Iid Le. IID dell'interfaccia per cui viene dichiarato il proxy. Obbligatorio. Il valore deve essere nel formato "{iid}".
nome Nome dell'interfaccia come appare nel codice. Ad esempio, "IViewObject". Non deve essere una stringa descrittiva. Questo attributo è facoltativo. Il valore deve essere nel formato "name".
tlbid Libreria dei tipi contenente la descrizione dell'interfaccia specificata dall'attributo iid . Questo attributo è facoltativo. Il valore deve essere nel formato : "{tlbid}".
baseInterface Id dell'interfaccia da cui deriva quello descritto dall'attributo iid . Questo attributo è facoltativo. Il valore deve essere nel formato "{iid}".
numMethods Numero di metodi implementati dall'interfaccia. Questo attributo è facoltativo. Il valore deve essere nel formato "n".
proxyStubClsid32 Esegue il mapping di un IID a un CLSID in DLL proxy a 32 bit.
Threadingmodel Modello di threading usato dalle classi COM in-process. Se questa proprietà è Null, non viene usato alcun modello di threading. Il componente viene creato nel thread principale del client e le chiamate da altri thread vengono marshallate a questo thread. Facoltativa. I valori validi sono: "Apartment", "Free", "Entrambi" e "Neutral".

windowclass

Nome di una classe windows che deve essere versioneta. L'elemento windowclass ha l'attributo seguente.

Attributo Descrizione
versione Questo attributo controlla se il nome della classe finestra interna usata nella registrazione contiene la versione dell'assembly contenente la classe della finestra. Il valore di questo attributo può essere "sì" o "no". Il valore predefinito è "sì". Il valore "no" deve essere usato solo se la stessa classe di finestra è definita da un componente side-by-side e un componente non side-by-side equivalente e si desidera considerarli come la stessa classe di finestra. Si noti che le regole consuete sulla registrazione della classe di finestra applicano solo il primo componente che registra la classe di finestra sarà in grado di registrarlo poiché non è in versione.

Nell'esempio seguente viene illustrato un elemento windowclass incluso in un elemento file .

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

Esempio

Di seguito è riportato un esempio di manifesto dell'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>