Partilhar via


Como: Configurar componentes COM baseados no .NET Framework para ativação sem registro

A ativação sem registro para componentes baseados no .NET Framework é apenas um pouco mais complicada do que para componentes COM. A configuração requer dois manifestos:

  • Os aplicativos COM devem ter um manifesto de aplicativo no estilo Win32 para identificar o componente gerenciado.

  • Os componentes baseados no .NET Framework devem ter um manifesto de componente para informações de ativação necessárias em tempo de execução.

Este tópico descreve como associar um manifesto de aplicativo a um aplicativo; associar um manifesto de componente a um componente; e incorporar um manifesto de componente em um assembly.

Criar um manifesto do aplicativo

  1. Usando um editor XML, crie (ou modifique) o manifesto do aplicativo de propriedade do aplicativo COM que está interoperando com um ou mais componentes gerenciados.

  2. Insira o seguinte cabeçalho padrão no início do arquivo:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    </assembly>
    

    Para obter informações sobre elementos de manifesto e seus atributos, consulte Manifestos de aplicativo.

  3. Identifique o proprietário do manifesto. No exemplo a seguir, myComApp a versão 1 possui o arquivo de manifesto.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity type="win32"
                        name="myOrganization.myDivision.myComApp"
                        version="1.0.0.0"
                        processorArchitecture="msil"
      />
    </assembly>
    
  4. Identificar assemblies dependentes. No exemplo a seguir, myComApp depende de myManagedComp.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity type="win32"
                        name="myOrganization.myDivision.myComApp"
                        version="1.0.0.0"
                        processorArchitecture="x86"
                        publicKeyToken="8275b28176rcbbef"
      />
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32"
                        name="myOrganization.myDivision.myManagedComp"
                        version="6.0.0.0"
                        processorArchitecture="X86"
                        publicKeyToken="8275b28176rcbbef"
          />
        </dependentAssembly>
      </dependency>
    </assembly>
    
  5. Salve e nomeie o arquivo de manifesto. O nome de um manifesto de aplicativo é o nome do executável do assembly seguido pela extensão .manifest. Por exemplo, o nome do arquivo de manifesto do aplicativo para myComApp.exe é myComApp.exe.manifest.

Você pode instalar um manifesto do aplicativo no mesmo diretório que o aplicativo COM. Como alternativa, você pode adicioná-lo como um recurso ao arquivo .exe do aplicativo. Para obter mais informações, consulte Sobre assemblies lado a lado.

Criar um manifesto de componente

  1. Usando um editor XML, crie um manifesto de componente para descrever o assembly gerenciado.

  2. Insira o seguinte cabeçalho padrão no início do arquivo:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    </assembly>
    
  3. Identifique o proprietário do arquivo. O <assemblyIdentity> elemento do elemento no arquivo de manifesto <dependentAssembly> do aplicativo deve corresponder ao do manifesto do componente. No exemplo a seguir, myManagedComp a versão 1.2.3.4 possui o arquivo de manifesto.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
           <assemblyIdentity
                        name="myOrganization.myDivision.myManagedComp"
                        version="1.2.3.4"
                        publicKeyToken="8275b28176rcbbef"
                        processorArchitecture="msil"
           />
    </assembly>
    
  4. Identifique cada classe no assembly. Use o <clrClass> elemento para identificar exclusivamente cada classe no assembly gerenciado. O elemento , que é um subelemento do <assembly> elemento , tem os atributos descritos na tabela a seguir.

    Atributo Description Obrigatório
    clsid O identificador que especifica a classe a ser ativada. Sim
    description Uma cadeia de caracteres que informa o usuário sobre o componente. Uma cadeia de caracteres vazia é o padrão. Não
    name Uma cadeia de caracteres que representa a classe gerenciada. Sim
    progid O identificador a ser usado para ativação tardia. Não
    threadingModel O modelo de threading COM. "Ambos" é o valor padrão. Não
    runtimeVersion Especifica a versão CLR (Common Language Runtime) a ser usada. Se você não especificar esse atributo e o CLR ainda não estiver carregado, o componente será carregado com o CLR instalado mais recente antes do CLR versão 4. Se você especificar v1.0.3705, v1.1.4322 ou v2.0.50727, a versão será automaticamente transferida para a versão CLR instalada mais recente antes da versão 4 do CLR (geralmente v2.0.50727). Se outra versão do CLR já estiver carregada e a versão especificada puder ser carregada lado a lado no processo, a versão especificada será carregada; caso contrário, o CLR carregado será usado. Isso pode causar uma falha de carga. Não
    tlbid O identificador da biblioteca de tipos que contém informações de tipo sobre a classe. Não

    Todas as tags de atributo diferenciam maiúsculas de minúsculas. Você pode obter CLSIDs, ProgIDs, modelos de threading e a versão de tempo de execução exibindo a biblioteca de tipos exportados para o assembly com o OLE/COM ObjectViewer (Oleview.exe).

    O manifesto do componente a seguir identifica duas classes testClass1 e testClass2.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
           <assemblyIdentity
                        name="myOrganization.myDivision.myManagedComp"
                        version="1.2.3.4"
                        publicKeyToken="8275b28176rcbbef"
           />
           <clrClass
                        clsid="{65722BE6-3449-4628-ABD3-74B6864F9739}"
                        progid="myManagedComp.testClass1"
                        threadingModel="Both"
                        name="myManagedComp.testClass1"
                        runtimeVersion="v1.0.3705">
           </clrClass>
           <clrClass
                        clsid="{367221D6-3559-3328-ABD3-45B6825F9732}"
                        progid="myManagedComp.testClass2"
                        threadingModel="Both"
                        name="myManagedComp.testClass2"
                        runtimeVersion="v1.0.3705">
           </clrClass>
           <file name="MyManagedComp.dll">
           </file>
    </assembly>
    
  5. Salve e nomeie o arquivo de manifesto. O nome de um manifesto de componente é o nome da biblioteca de assembly seguido pela extensão .manifest. Por exemplo, o myManagedComp.dll é myManagedComp.manifest.

Você deve incorporar o manifesto do componente como um recurso no assembly.

Para incorporar um manifesto de componente em um assembly gerenciado

  1. Crie um script de recurso que contenha a seguinte instrução:

    1 RT_MANIFEST myManagedComp.manifest

    Nesta instrução, myManagedComp.manifest é o nome do manifesto do componente que está sendo incorporado. Neste exemplo, o nome do arquivo de script é myresource.rc.

  2. Compile o script usando o Microsoft Windows Resource Compiler (Rc.exe). Na linha de comandos, escreva o seguinte comando:

    rc myresource.rc

    Rc.exe produz o arquivo de myresource.res recurso.

  3. Compile o arquivo de origem do assembly novamente e especifique o arquivo de recurso usando a opção /win32res :

    /win32res:myresource.res

    Novamente, myresource.res é o nome do arquivo de recurso que contém recursos incorporados.

Consulte também