Como: Configurar componentes COM baseados no .NET Framework para ativação sem registro
A ativação sem registro de componentes baseados no .NET Framework é apenas um pouco mais complicada do que para componentes COM. A instalação exige dois manifestos:
Os aplicativos COM devem ter um manifesto do aplicativo no estilo Win32 para identificar o componente gerenciado.
Os componentes baseados no .NET Framework devem ter um manifesto do componente para obter as informações de ativação necessárias em tempo de execução.
Este tópico descreve como associar um manifesto do aplicativo a um aplicativo, associar um manifesto do componente a um componente e inserir um manifesto do componente em um assembly.
Criar um manifesto do aplicativo
Usando um editor de XML, crie (ou modifique) o manifesto do aplicativo pertencente ao aplicativo COM que interopera com um ou mais componentes gerenciados.
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 e elementos de manifesto e seus atributos, confira Manifestos de aplicativo.
Identifique o proprietário do manifesto. No exemplo a seguir,
myComApp
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>
Identifique os assemblies dependentes. No exemplo a seguir,
myComApp
depende demyManagedComp
.<?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>
Salve e nomeie o arquivo de manifesto. O nome de um manifesto do 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 do aplicativo COM. Como alternativa, adicione-o como um recurso ao arquivo .exe do aplicativo. Para obter mais informações, confira Usando assemblies lado a lado.
Criar um manifesto do componente
Usando um editor de XML, crie um manifesto do componente para descrever o assembly gerenciado.
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>
Identifique o proprietário do arquivo. O elemento
<assemblyIdentity>
do elemento<dependentAssembly>
no arquivo de manifesto do aplicativo deve corresponder àquele no manifesto do componente. No exemplo a seguir,myManagedComp
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>
Identifique cada classe no assembly. Use o elemento
<clrClass>
para identificar cada classe exclusivamente no assembly gerenciado. O elemento, que é um subelemento do elemento<assembly>
, tem os atributos descritos na tabela a seguir.Atributo Descrição 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. No name
Uma cadeia de caracteres que representa a classe gerenciada. Sim progid
O identificador a ser usado para a ativação de associação tardia. No threadingModel
O modelo de threading COM. “Ambos” é o valor padrão. No runtimeVersion
Especifica a versão do 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 último CLR instalado anterior ao CLR versão 4. Se você especificar v1.0.3705, v1.1.4322 ou v2.0.50727, a versão efetuará roll forward automaticamente até a última versão instalada do CLR anterior ao CLR versão 4 (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 poderá causar uma falha de carregamento. No tlbid
O identificador da biblioteca de tipos que contém informações sobre a classe. No Todas as marcações de atributo diferenciam maiúsculas de minúsculas. É possível obter CLSIDs, ProgIDs, modelos de threading e a versão de runtime exibindo a biblioteca de tipos exportada para o assembly com o ObjectViewer OLE/COM (Oleview.exe).
O manifesto do componente a seguir identifica duas classes,
testClass1
etestClass2
.<?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>
Salve e nomeie o arquivo de manifesto. O nome de um manifesto do componente é o nome da biblioteca de assemblies seguido pela extensão .manifest. Por exemplo, a myManagedComp.dll é myManagedComp.manifest.
É necessário inserir o manifesto do componente como um recurso no assembly.
Para inserir um manifesto do componente em um assembly gerenciado
Crie um script de recurso que contém a seguinte instrução:
1 RT_MANIFEST myManagedComp.manifest
Nessa instrução,
myManagedComp.manifest
é o nome do manifesto do componente que está sendo inserido. Neste exemplo, o nome do arquivo de script émyresource.rc
.Compile o script usando o Compilador de Recurso do Microsoft Windows (Rc.exe). No prompt de comando, digite o comando a seguir:
rc myresource.rc
O Rc.exe gera o arquivo de recurso
myresource.res
.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 o recurso inserido.