COM без регистрации от ASP.NET? - PullRequest
1 голос
/ 06 февраля 2012

Windows позволяет использовать COM-объект без регистрации 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 (dll, содержащая COM-классы, которые мы хотим использовать)

с манифестом сборки 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>

Отлично. Теперь я могу использовать COM-объект из (собственного или .NET) исполняемого файла без необходимости регистрации COM-объекта.

Теперь я хочу использовать COM-объект с веб-сайта ASP.NET , без регистрации COM-объекта.

возможно?


Бонусная болтовня

Windows также позволяет exe вызывать библиотеку .NET, не устанавливая сборку .NET в глобальный кэш сборок .

1 Ответ

3 голосов
/ 08 февраля 2012

Хотя я не могу проверить это прямо сейчас, я почти уверен, что это работает:

Если манифест для DLL является внешним, он обычно игнорируется, когда DLL загружается через LoadLibrary (согласнодо MSDN ).Если манифест встроен в DLL, он обычно выполняется.

Внедрение манифеста в приложение ASP.NET (т.е. DLL с выделенным кодом) - некоторые способы, как это сделать, см. здесь и здесь и здесь .

ОБНОВЛЕНИЕ - согласно комментариям:

Выше приведен обходной путь, поскольку не существует общего способа сделать это (изоляция), по крайней мере, создатели ASP.NETне предполагалось, что это возможно - например, вышеупомянутый обходной путь не будет работать в случаях, когда приложение не компилируется в DLL ...

...