Manifestos do assembly

Um manifesto do assembly é um arquivo XML que descreve um assembly lado a lado. Os manifestos de assembly descrevem os nomes e versões de assemblies, arquivos e recursos lado a lado do assembly, bem como a dependência do assembly em outros assemblies lado a lado. A instalação, a ativação e a execução corretas de assemblies lado a lado exigem que o manifesto do assembly sempre acompanhe um assembly no sistema.

Para obter uma listagem completa do esquema XML, consulte Esquema de arquivo de manifesto.

Os manifestos de assembly têm os seguintes elementos e atributos.

Elemento Atributos Obrigatório
Assembly Sim
manifestVersion Sim
noInheritable Não
assemblyIdentity Sim
tipo Sim
name Sim
linguagem Não
Processorarchitecture Não
version Sim
publicKeyToken Não
Dependência Não
dependentAssembly Não
file Não
name Sim
Hashalg Não
hash Não
comClass No
descrição Não
clsid Sim
Threadingmodel Não
tlbid Não
progid Não
Miscstatus Não
miscStatusIcon Não
miscStatusContent Não
miscStatusDocPrint Não
miscStatusThumbnail Não
Typelib Não
tlbid Sim
version Sim
helpdir Sim
Resourceid Não
sinalizadores Não
comInterfaceExternalProxyStub Não
iid Sim
Baseinterface Não
numMethods Não
name Não
tlbid Não
proxyStubClsid32 Não
comInterfaceProxyStub Não
iid Sim
name Sim
tlbid Não
Baseinterface Não
numMethods Não
proxyStubClsid32 Não
Threadingmodel Não
windowClass Não
Versionado Não

Localização do arquivo

Os manifestos do assembly podem ser instalados em três locais:

  • Como manifestos que acompanham assemblies compartilhados, os manifestos do assembly devem ser instalados como um arquivo separado no cache de assembly lado a lado. Geralmente, essa é a pasta WinSxS no diretório do Windows.
  • Como manifestos que acompanham assemblies privados, os manifestos de assembly devem ser instalados na estrutura de diretório do aplicativo. Geralmente, esse é um arquivo separado na mesma pasta que o arquivo executável do aplicativo.
  • Como um recurso em uma DLL, o assembly está disponível para o uso privado da DLL. Um manifesto do assembly não pode ser incluído como um recurso em um EXE. Um arquivo EXE pode incluir um manifesto do aplicativo como um recurso.

Sintaxe do nome do arquivo

O nome de um manifesto do assembly é qualquer nome de arquivo válido seguido por .manifest.

Por exemplo, um manifesto do assembly que se refere a myassembly usaria a seguinte sintaxe de nome de arquivo: myassembly.<resource ID>.manifest. Você poderá omitir o <resource ID> campo se o manifesto do assembly estiver sendo instalado como um arquivo separado ou se a ID do recurso for 1.

Observação

Devido à maneira como pesquisa lado a lado assemblies privados, as restrições de nomenclatura a seguir se aplicam ao empacotar uma DLL como um assembly privado. Uma maneira recomendada de fazer isso é colocar o manifesto do assembly na DLL como um recurso. Nesse caso, a ID do recurso deve ser igual a 1 e o nome do assembly privado pode ser o mesmo que o nome da DLL. Por exemplo, se o nome da DLL for Microsoft.Windows.mysample.dll, o valor do atributo name usado no elemento assemblyIdentity do manifesto também poderá ser Microsoft.Windows.mysample. Uma maneira alternativa é colocar o manifesto do assembly em um arquivo separado. Nesse caso, o nome do assembly e seu manifesto devem ser diferentes do nome da DLL. Por exemplo, Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest e Microsoft.Windows.Mysample.dll. Para obter mais informações sobre como pesquisa lado a lado para assemblies privados, consulte Sequência de pesquisa de assembly.

Elementos

Nomes de elementos e atributos diferenciam maiúsculas de minúsculas. Os valores de elementos e atributos não diferenciam maiúsculas de minúsculas, exceto pelo valor do atributo de tipo.

Assembly

Um elemento container. Seu primeiro subelemento deve ser um elemento assemblyIdentity ou noInheritable . O manifesto do assembly descreve exclusivamente o assembly lado a lado identificado pela assemblyIdentity. Obrigatórios.

O elemento assembly deve estar no namespace "urn:schemas-microsoft-com:asm.v1". Os elementos filho do assembly também devem estar nesse namespace, por herança ou marcação.

O elemento assembly tem o seguinte atributo.

Atributo Descrição
manifestVersion O atributo manifestVersion deve ser definido como 1.0.

noInheritable

Inclua esse elemento em um manifesto de assembly para indicar que o assembly gerencia os contextos de ativação e seus objetos. O elemento noInheritable deve ser um subelemento de um elemento assembly . O elemento assemblyIdentity deve vir após qualquer elemento noInheritable . O elemento noInheritable será necessário no manifesto do assembly se o assembly for usado por qualquer manifesto de aplicativo que inclua o elemento noInherit . Um elemento noInheritable em um manifesto do aplicativo não tem efeito. Um elemento noInheritable não tem elementos filho.

Assemblyidentity

Descreve e identifica exclusivamente um assembly lado a lado.

Como o primeiro subelemento de um elemento assembly , assemblyIdentity descreve e identifica exclusivamente o assembly lado a lado que possui esse manifesto do assembly. Isso é chamado de assemblyIdentity de contexto DEF do manifesto do assembly.

Como o primeiro subelemento de um elemento dependentAssembly , assemblyIdentity descreve e identifica exclusivamente um assembly lado a lado usado pela assemblyIdentity de contexto DEF. Isso é chamado de assemblyIdentity de contexto REF do manifesto do assembly. O assembly de contexto DEF requer que o assembly de contexto REF funcione corretamente. Observe que cada assemblyIdentity de contexto REF deve corresponder exatamente a uma assemblyIdentity de contexto DEF correspondente no manifesto do assembly referenciado.

Esse elemento não tem subelementos. O elemento assemblyIdentity tem os seguintes atributos.

Atributo Descrição
tipo Especifica o tipo de assembly. O valor deve ser win32 e, em letras minúsculas. Obrigatórios.
name Nomeia exclusivamente o assembly. Use o seguinte formato para o nome do assembly: Organization.Division.Name. Por exemplo, Microsoft.Windows.mysampleAsm. Obrigatórios. Observe que, no caso de uma DLL empacotada como um assembly privado com um arquivo de manifesto separado, o nome do assembly deve ser diferente do nome da DLL e do manifesto.
linguagem Identifica o idioma do assembly. Opcional. Se o assembly for específico do idioma, especifique o código de linguagem DHTML. No assemblyIdentity de contexto DEF de um manifesto de assembly destinado ao uso mundial (idioma neutro) omita o atributo de linguagem.
Em um assemblyIdentity de contexto REF de um manifesto de assembly destinado ao uso mundial (idioma neutro) defina o valor da linguagem como "*".
Processorarchitecture Especifica o processador. Os valores válidos são x86 para Windows de 32 bits e ia64 para Windows de 64 bits. Opcional.
version Especifica a versão do assembly. Use o formato de versão de quatro partes: mmmmm.nnnnn.ooooo.ppppp. Cada uma das partes separadas por períodos pode ser 0-65535 inclusive. Para obter mais informações, consulte Versões de assembly. Obrigatórios.
publicKeyToken Uma cadeia de caracteres hexadecimal de 16 caracteres que representa os últimos 8 bytes do hash SHA-1 da chave pública sob a qual o assembly é assinado. A chave pública usada para assinar o catálogo deve ter 2.048 bits ou mais. Necessário para assemblies lado a lado compartilhados.

Dependência

Um elemento de contêiner, incluindo pelo menos um dependentAssembly. O primeiro subelemento deve ser um elemento dependentAssembly . Uma dependência não tem atributos. Opcional.

Dependentassembly

O primeiro subelemento deve ser um elemento assemblyIdentity que descreve e identifica exclusivamente um assembly lado a lado que é usado pelo assembly lado a lado que possui esse manifesto do assembly. Cada dependentAssembly deve estar dentro exatamente de uma dependência. Opcional.

Arquivo

Contém arquivos usados por um assembly lado a lado. Contém subelementos comClass, typelib, windowClass, comInterfaceProxyStub . Opcional.

O elemento de arquivo tem os seguintes atributos.

Atributo Descrição
name O nome do arquivo, por exemplo, Conctl32.dll.
Hashalg Algoritmo usado para criar um hash do arquivo. Esse valor deve ser SHA1.
hash Um hash do arquivo referenciado pelo nome. Uma cadeia de caracteres hexadecimal de comprimento dependendo do algoritmo de hash.

Comclass

Um subelemento de um elemento de arquivo . Opcional.

O elemento comClass tem os seguintes atributos.

Atributo Descrição
descrição Nome da classe.
clsid O GUID que identifica exclusivamente a Classe . Obrigatórios. O valor deve estar no formato de um GUID válido.
Threadingmodel O modelo de threading usado por classes COM no processo. Se essa propriedade for nula, nenhum modelo de threading será usado. O componente é criado no thread principal do cliente e o marshaling de chamadas de outros threads é realizado para esse thread. Opcional. Os valores válidos são: "Apartment", "Free", "Both" e "Neutral".
tlbid Obtém o GUID para a biblioteca de tipos para este componente COM. O valor deve estar no formato de um GUID. Opcional.
progid Identificador programático dependente de versão associado ao componente COM. O formato de um ProgID é <fornecedor>.<componente>.<versão>.
Miscstatus Duplica no manifesto do assembly as informações fornecidas pela chave do Registro MiscStatus. Se os valores dos atributos miscStatusIcon, miscStatusContent, miscStatusDocprint ou miscStatusThumbnail não forem encontrados, o valor padrão correspondente listado em miscStatus será usado para os atributos ausentes. O valor pode ser uma lista delimitada por vírgulas dos valores de atributo da tabela abaixo. Você poderá usar esse atributo se a classe COM for uma classe OCX que exija valores de chave do Registro Miscstatus.
miscStatusIcon Duplica no manifesto do assembly as informações fornecidas por DVASPECT_ICON. Ele pode fornecer um ícone de um objeto. O valor pode ser uma lista delimitada por vírgulas dos valores de atributo da tabela abaixo. Você poderá usar esse atributo se a classe COM for uma classe OCX que exija valores de chave do Registro Miscstatus.
miscStatusContent Duplica no manifesto do assembly as informações fornecidas por DVASPECT_CONTENT. Ele pode fornecer um documento composto que pode ser exibido para uma tela ou impressora. O valor pode ser uma lista delimitada por vírgulas dos valores de atributo da tabela abaixo. Você poderá usar esse atributo se a classe COM for uma classe OCX que exija valores de chave do Registro Miscstatus.
miscStatusDocprint Duplica no manifesto do assembly as informações fornecidas por DVASPECT_DOCPRINT. Ele pode fornecer uma representação de objeto exibivel na tela como se fosse impressa em uma impressora. O valor pode ser uma lista delimitada por vírgulas dos valores de atributo da tabela abaixo. Você poderá usar esse atributo se a classe COM for uma classe OCX que exija valores de chave do Registro Miscstatus.
miscStatusThumbnail Duplicatas em um assembly manifestam as informações fornecidas por DVASPECT_THUMBNAIL. Ele pode fornecer uma miniatura de um objeto que pode ser exibido em uma ferramenta de navegação. O valor pode ser uma lista delimitada por vírgulas dos valores de atributo da tabela abaixo. Você poderá usar esse atributo se a classe COM for uma classe OCX que exija valores de chave do Registro Miscstatus.

O elemento comClass pode ter <elementos progid>... como filhos, que listam os progids dependentes de versão.

O exemplo a seguir mostra um elemento comClass incluído em um elemento de arquivo .

<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 a classe COM for uma classe OCX que requer a subchave do Registro MiscStatus para especificar como criar e exibir um objeto, você poderá habilitar o objeto duplicando essas informações no manifesto do assembly. Especifique as características do objeto usando os atributos miscStatus, miscStatusIcon, miscStatusContent, miscStatusDocprint e miscStatusThumbnail do elemento comClass . Defina esses atributos como uma lista separada por vírgulas de valores de atributo da tabela a seguir. Esses atributos duplicam as informações que seriam fornecidas por uma enumeração DVASPECT. Se um valor não for encontrado para miscStatusIcon, miscStatusContent, miscStatusDocprint ou miscStatusThumbnail, os valores padrão especificados em miscStatus serão usados. Use valores de atributo da tabela a seguir. Eles correspondem aos sinalizadores de bit de uma enumeração OLEMISC .

Valor do atributo Constante 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
alinhável OLEMISC_ALIGNABLE
simpleframe OLEMISC_SIMPLEFRAME
setclientsitefirst OLEMISC_SETCLIENTSITEFIRST
Imemode TOLEMISC_IMEMODE
ignoreativatewhenvisible OLEMISC_IGNOREACTIVATEWHENVISIBLE
wantstomenumerge OLEMISC_WANTSTOMENUMERGE
supportsmultilevelundo OLEMISC_SUPPORTSMULTILEVELUNDO

Typelib

Um subelemento de um elemento de arquivo . Opcional.

O elemento typelib tem os atributos mostrados na tabela a seguir.

Atributo Descrição
tlbid A ID exclusiva da biblioteca de tipos. Obrigatórios.
version O número de versão de duas partes da biblioteca de tipos. Se apenas o número de versão secundária aumentar, todos os recursos da biblioteca de tipos anteriores serão compatíveis. Se o número de versão principal for alterado, o código compilado na biblioteca de tipos deverá ser recompilado. O número de versão da biblioteca de tipos pode ser diferente do número de versão do aplicativo. Obrigatórios.
helpdir O diretório em que o arquivo de Ajuda para os tipos na biblioteca de tipos está localizado. Se o aplicativo der suporte a bibliotecas de tipos para vários idiomas, as bibliotecas poderão se referir a nomes de arquivo diferentes no diretório arquivo de Ajuda. Se nenhum valor, especifique "". Obrigatórios.
Resourceid A representação de cadeia de caracteres hexadecimal do LCID (identificador de localidade). É um a quatro dígitos hexadecimal sem prefixo 0x e sem zeros à esquerda. O LCID pode ter um identificador de sublinguagens de programação neutro. Para obter mais informações, consulte Identificadores de localidade. Opcional.
sinalizadores A representação de cadeia de caracteres dos sinalizadores de biblioteca de tipos para esta biblioteca de tipos. Especificamente, ele deve ser um entre "RESTRICTED", "CONTROL", "HIDDEN" e "HASDISKIMAGE". Esses são os valores da enumeração LIBFLAGS e são os mesmos sinalizadores especificados no parâmetro uLibFlags do método ICreateTypeLib::SetLibFlags . Opcional.

O exemplo a seguir mostra um elemento typelib incluído em um elemento de arquivo .

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

comInterfaceExternalProxyStub

O comInterfaceExternalProxyStub é um subelemento de um elemento assembly e é usado para interfaces de automação. Por exemplo, IDispatch e suas interfaces derivadas. Opcional.

A implementação de proxy-stub padrão é adequada para a maioria das interfaces de automação, como interfaces derivadas de IDispatch. O stub do proxy de interface e todas as outras implementações de interface proxy-stub externas devem ser listados no comInterfaceExternalProxyStub. O elemento comInterfaceExternalProxyStub tem os atributos mostrados na tabela a seguir.

Atributo Descrição
iid A IID da interface para a qual o proxy está sendo declarado. Obrigatórios. O valor deve estar no formato: "{iid}".
Baseinterface O IID da interface da qual o descrito pelo atributo iid é derivado. Esse atributo é opcional. O valor deve estar no formato: "{iid}".
numMethods O número de métodos implementados pela interface. Esse atributo é opcional. O valor deve estar no formato: "n".
name Nome da interface como ela apareceria no código. Por exemplo, "IViewObject". Essa não deve ser uma cadeia de caracteres descritiva. Esse atributo é opcional. O valor deve estar no formato: "name".
tlbid A biblioteca de tipos que contém a descrição da interface especificada pelo atributo iid . Esse atributo é opcional. O valor deve estar no formato: "{tlbid}" .
proxyStubClsid32 Mapeia uma IID para uma CLSID em DLLs de proxy de 32 bits.

O exemplo a seguir mostra um elemento comInterfaceExternalProxyStub .

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

comInterfaceProxyStub

Um subelemento de um elemento de arquivo . Opcional.

Se um arquivo no assembly implementar um stub de proxy, a marca de arquivo correspondente deverá incluir um subelemento comInterfaceProxyStub com atributos idênticos a um elemento comInterfaceProxyStub . O marshaling de interfaces entre processos e threads pode não funcionar conforme o esperado se você omitir algumas das dependências comInterfaceProxyStub do componente.

O elemento comInterfaceProxyStub tem os seguintes atributos.

Atributo Descrição
iid O. IID da interface para a qual o proxy está sendo declarado. Obrigatórios. O valor deve estar no formato: "{iid}".
name Nome da interface como ela apareceria no código. Por exemplo, "IViewObject". Essa não deve ser uma cadeia de caracteres descritiva. Esse atributo é opcional. O valor deve estar no formato: "name".
tlbid A biblioteca de tipos que contém a descrição da interface especificada pelo atributo iid . Esse atributo é opcional. O valor deve estar no formato: "{tlbid}".
Baseinterface O IID da interface da qual o descrito pelo atributo iid é derivado. Esse atributo é opcional. O valor deve estar no formato: "{iid}".
numMethods O número de métodos implementados pela interface. Esse atributo é opcional. O valor deve estar no formato: "n".
proxyStubClsid32 Mapeia uma IID para uma CLSID em DLLs de proxy de 32 bits.
Threadingmodel O modelo de threading usado por classes COM no processo. Se essa propriedade for nula, nenhum modelo de threading será usado. O componente é criado no thread principal do cliente e o marshaling de chamadas de outros threads é realizado para esse thread. Opcional. Os valores válidos são: "Apartment", "Free", "Both" e "Neutral".

Windowclass

O nome de uma classe windows que deve ser versão. O elemento windowclass tem o atributo a seguir.

Atributo Descrição
Versionado Esse atributo controla se o nome da classe de janela interna usado no registro contém ou não a versão do assembly que contém a classe de janela. O valor desse atributo pode ser "sim" ou "não". O padrão é "sim". O valor "não" só deverá ser usado se a mesma classe de janela for definida por um componente lado a lado e um componente não lado a lado equivalente e você desejar tratá-los como a mesma classe de janela. Observe que as regras usuais sobre o registro de classe de janela aplicam-se apenas ao primeiro componente que registra a classe de janela será capaz de registrá-la, pois ela não é versão.

O exemplo a seguir mostra um elemento windowclass incluído em um elemento de arquivo .

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

Exemplo

Veja a seguir um exemplo de um manifesto do 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>