Compartilhar via


Manifestos do assembly

Um manifesto do assembly é um arquivo XML que descreve um assembly lado a lado. Os manifestos do assembly descrevem os nomes e versões de assemblies lado a lado, arquivos e recursos 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 do assembly têm os seguintes elementos e atributos.

Elemento Atributos Obrigatório
assembly Yes
manifestVersion Yes
noInheritable Não
assemblyIdentity Yes
tipo Yes
nome Yes
idioma Não
processorArchitecture Não
versão Yes
publicKeyToken Não
de dependência Não
dependentAssembly Não
file Não
nome Yes
hashalg Não
de hash Não
comClass Não
descrição Não
clsid Yes
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 Yes
versão Yes
helpdir Yes
resourceid Não
sinalizadores Não
comInterfaceExternalProxyStub Não
iid Yes
baseInterface Não
numMethods Não
nome Não
tlbid Não
proxyStubClsid32 Não
comInterfaceProxyStub Não
iid Yes
nome Yes
tlbid Não
baseInterface Não
numMethods Não
proxyStubClsid32 Não
threadingModel Não
windowClass Não
com versão Não

Local 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 do 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ê pode 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 os assemblies privados, as seguintes restrições de nomenclatura 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 assemblies privados, consulte Sequência de Pesquisa de Assembly.

Elementos

Os 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.

assembléia

Um elemento de contêiner. 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ório

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 atributo a seguir.

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

noInheritable

Inclua esse elemento em um manifesto do 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 quaisquer manifestos de aplicativo que incluam 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 que é usado pela assemblyIdentity de contexto DEF. Isso é chamado de assemblyIdentity ref-context 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 caso inferior. Obrigatório
nome Nomeia exclusivamente o assembly. Use o seguinte formato para o nome do assembly: Organization.Division.Name. Por exemplo, Microsoft.Windows.mysampleAsm. Obrigatório 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.
idioma 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.
versão 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 do Assembly. Obrigatório
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.

de 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 de exatamente 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
nome O nome do arquivo, por exemplo, Conctl32.dll.
hashalg Algoritmo usado para criar um hash do arquivo. Esse valor deve ser SHA1.
de 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ório O valor deve estar no formato de um GUID válido.
threadingModel O modelo de threading usado por classes COM em processo. Se essa propriedade for nula, nenhum modelo de threading será usado. O componente é criado no thread principal do cliente e as chamadas de outros threads são empacotadas para esse thread. Opcional. Os valores válidos são: "Apartment", "Free", "Both" e "Neutral".
tlbid 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 assembly as informações fornecidas pelo 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 assembly as informações fornecidas pelo 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 pelo DVASPECT_DOCPRINT. Ele pode fornecer uma representação de objeto exibivel na tela como se estivesse 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 Duplica em um assembly as informações fornecidas pelo 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 <progid>... elementos como filhos, que listam os progids dependentes da 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 para 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
estático 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
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ório
versão 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ório
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 de arquivos da Ajuda. Se nenhum valor, especifique "". Obrigatório
resourceid A representação de cadeia de caracteres hexadecimal do identificador de localidade (LCID). É um a quatro dígitos hexadecimal sem prefixo 0x e sem zeros à esquerda. O LCID pode ter um identificador de sublanguagem 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 essa biblioteca de tipos. Especificamente, ele deve ser um de "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 de proxy externo 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ório O valor deve estar no formato: "{iid}".
baseInterface A IID da interface da qual a descrição pelo atributo iid é derivada. 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 na forma: "n".
nome 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 formulário: "{tlbid}" .
proxyStubClsid32 Mapeia uma IID para um 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ório O valor deve estar no formato: "{iid}".
nome 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 A IID da interface da qual a descrição pelo atributo iid é derivada. 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 na forma: "n".
proxyStubClsid32 Mapeia uma IID para um CLSID em DLLs de proxy de 32 bits.
threadingModel O modelo de threading usado por classes COM em processo. Se essa propriedade for nula, nenhum modelo de threading será usado. O componente é criado no thread principal do cliente e as chamadas de outros threads são empacotadas 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
com versão 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>