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
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.
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.
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>
Identificar 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 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
Usando um editor XML, crie um manifesto de 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
<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>
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
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 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
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
.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.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.