Ne ho già accennato nei blogs precedenti, ma ora, prendendo spunto da questo articolo su MSDN ho fatto alcune prove sul campo della nuova modalità Reg-Free COM disponibile in Visual Studio 2005 e devo dire che i risultati sono notevoli.
Riassumendo brevemente: Reg-Free COM permette di effettuare il deployment di applicazioni .NET facenti uso di componenti COM (ActiveX Dll e controlli ActiveX) via XCopy e, sopratutto, via ClickOnce evitando la registrazione di tali componenti nella macchina host.

Partiamo per gradi: In realtà Registration Free COM è un servizio messo a
disposizione da Windows XP il quale nel caso le informazioni di registrazione COM non siano presenti nel registry verifica se nella stessa directory è presente un file .manifest e, se presente, utilizzando le informazioni in esso contenute per generare l'istanza dell'oggetto COM.

Generare il manifest manualmente, sebbene possibile, non è una cosa proprio immediata (l'SDK 2.0 offre delle utility per questa operazione) ma la grande novità è che quello che dobbiamo semplicemente fare con Visual Studio 2005 è, dopo avere settato un riferimento al componente COM (regolarmente registrato sulla macchina di sviluppo),impostare la proprietà Isolated=True. Fatto questo VS 2005 si occuperà di analizzarne la type library e generare il file .manifest al posto nostro, eventualmente integrando le informazioni COM all'interno di un file .manifest già presente (ad esempio perchè generato durante il publishing con ClickOnce).
Giusto per darvi un idea, questo è un esempio di file manifest.

<?xml version="1.0" encoding="utf-8"?>
<assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="
http://www.w3.org/2000/09/xmldsig#" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity name="RegFree.exe" version="1.0.0.0" type="win32" />
  <file name="PureVB6.dll" asmv2:size="20480">
    <hash xmlns="urn:schemas-microsoft-com:asm.v2">
      <dsig:Transforms>
        <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
      </dsig:Transforms>
      <dsig:DigestMethod Algorithm="
http://www.w3.org/2000/09/xmldsig#sha1" />
      <dsig:DigestValue>BBQqtUaNhEJC82kw4N+PQbG0pzQ=</dsig:DigestValue>
    </hash>
    <typelib tlbid="{79a4e7b8-ade3-4a12-9f3e-84247f6f3bfd}" version="2.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
    <comClass clsid="{ada4cea0-4971-4d20-804a-5a3ca669426f}" threadingModel="Apartment" tlbid="{79a4e7b8-ade3-4a12-9f3e-84247f6f3bfd}" progid="PureVB6.Test" />
  </file>
</assembly>

In grassetto ho indicato le parti che evidenziano come in esso siano contenute le classiche informazioni di descrizione di un tipo COM, non a caso i files .manifest vengono ora elencati tra i tipi supportati quando si seleziona "Add new reference" da Visual Studio 2005.
Le note negative: Reg-Free COM è supportato solo da Windows XP e Windows Server 2003  e non è disponibile per componenti ActiveX Exe e, ovviamente, non va visto come un alternativa alle installazioni che modificano in maniera massiccia il sistema operativo (mi riferisco a MDAC,DirectX,Componenti Office...)
A parte queste limitazioni visto che le applicazioni .NET continueranno ad essere mixed-technology (COM+.NET) per parecchio tempo, avere questa 'scappatoia' dal DLL Hell e la porta aperta verso ClickOnce  è un'altro tra gli innumerevoli motivi per passare a Visual Studio 2005 non appena disponibile.