来自ASP.NET的免注册COM?

时间:2012-02-06 15:48:51

标签: asp.net com manifest regfreecom

Windows允许使用COM对象without having to register the COM dll

该机制是在应用程序的清单中包含“依赖程序集”:

  

MyProgram.exe.manifest

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity type="win32" name="myapp.exe" version="1.2.3.4" />
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Contoso.Frobber" version="5.1.81.4" />
    </dependentAssembly>
  </dependency>
</assembly>

然后你的文件夹包含:

  • MyProgram.exe
  • MyProgram.exe.manifest(如果您使用的是外部清单;也可以嵌入RT_MANIFEST资源)
  • Contoso.Frobber.manifest(COM DLL清单)
  • confrob.dll(包含我们要使用的COM类的dll)

使用COM dll的程序集清单包含:

  

Contoso.Frobber.manifest

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

   <assemblyIdentity type="win32" name="Contoso.Frobber" version="1.0.0.0" />

   <file name = "confrob.dll">

      <comClass
            progid="Frobber.Gizmo"
            clsid="{00028C00-0000-0000-0000-000000000046}"
            description="Gizmo Frobber by Contoso"
            threadingModel = "Apartment" />

      <typelib 
            tlbid="{00028C01-0000-0000-0000-000000000046}"
            version="1.0" 
            helpdir=""/>
   </file>
</assembly>

优异。我现在可以使用来自(本机或.NET)可执行文件的COM对象,而无需注册COM对象。

现在我想使用 ASP.NET网站中的COM对象,而无需注册COM对象。

可能的?


Bonus Chatter

Windows还允许使用exe to call a .NET library, without having to install the .NET assembly into the Global Assembly Cache

1 个答案:

答案 0 :(得分:3)

虽然我现在无法测试,但我很确定这有效:

如果DLL的清单是外部的,当通过LoadLibrary加载DLL时,通常会忽略它(根据MSDN)。如果清单嵌入到DLL中,通常会受到尊重。

将清单嵌入ASP.NET应用程序(即代码隐藏DLL) - 有关如何执行此操作的一些方法,请参阅herehere以及here

更新 - 根据评论:

以上是一种解决方法,因为没有通用的方法(隔离),至少ASP.NET创建者并不打算这样做 - 例如上面的解决方法不适用于应用程序无法编译为DLL ...