ASP.NETからの登録不要のCOM?

Windowsでは、COMオブジェクトを COM dllを登録することなく使用できます。

このメカニズムは、アプリケーションのマニフェストに "依存アセンブリ"を含めることです。

MyProgram.exe.manifest

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

  
  
    
      
    
  

そしてあなたのフォルダには以下が含まれます:

  • MyProgram.exe
  • MyProgram.exe.manifest (if you're using an external manifest; could also be embedded at RT_MANIFEST resource)
  • Contoso.Frobber.manifest (the COM DLL manifest)
  • confrob.dll (the dll containing the COM classes we want to use)

COM dllのアセンブリマニフェストには次が含まれます。

Contoso.Frobber.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>


   

   

      

      
   

優秀な。私は今、COMオブジェクトを登録せずに(ネイティブまたは.NET)実行可能ファイルからCOMオブジェクトを使用できます。

COMオブジェクトを登録せずに、 ASP.NET WebサイトのCOMオブジェクトを使用したいと考えています。

可能?


ボーナスチャッター

また、Windowsでは、 exeが.NETライブラリを呼び出すことができます。グローバルアセンブリキャッシュに組み込むことができます。

1
@RB登録されていないDLLに依存したいプログラムは、その依存関係をマニフェスト(元の例では MyProgram.exe.manifest )で宣言する必要があります。 ASP.NETの場合、私が気にしなければならないプログラムは w3wp.exe で、 w3wp.exe.manifest を作成して Program Files すべての wwwワーカープロセスを明示すべきではありません。私は私の "ウェブサイト"を明示したいだけです。そして、私は「ウェブサイトを明示する」方法がありません。
追加された 著者 Ian Boyd,
dbgrid32.ocx は、登録不要のCOMがどのような目的で使用されているかを人々が理解できるようにするための一例に過ぎません。私は dbgrid32.ocx を実際に使用しているファイル名に置き換えます。それは質問や概念を変えるものではありませんが、人々が私が求めていることを理解することをより困難にするかもしれません。
追加された 著者 Ian Boyd,
あなたはそれが不可能だと思いますか?
追加された 著者 RB.,
あなたが何をしようとしているのか分かりません。これは古いDAOベースのビジュアルコントロールなので、アンバインドモードでクライアント側を使用することをお勧めします。 Reg-free COMは適用されず、必須ではありません。ページのライセンスパッケージ(LPK)ファイルを作成して指定する限り、そのActiveXコントロールをサイトのCABファイルのタグ経由でIEにロードする方法もあります。でも、これはIEの緩和されたセキュリティを前提としています。
追加された 著者 Bob77,
追加された 著者 Bob77,

1 答え

私は今それをテストすることはできませんが、私はかなりこれが動作すると確信しています:

DLLのマニフェストが外部の場合、DLLは LoadLibrary でロードされると無視されます( MSDN )。マニフェストがDLLに埋め込まれている場合、通常はそれが適用されます。

マニフェストをASP.NETアプリケーション(つまりコードビハインドDLL)に埋め込む - これを行う方法については、ここここここ

更新 - コメントごとに:

これを行う一般的な方法がないため、上記の回避策があります。少なくとも、ASP.NET作成者はこれを可能にすることを意図していません。たとえば、アプリケーションが実行できない場合は上記の回避策が機能しません。 DLLにコンパイルする...

3
追加された
私は実際には、グローバル asp.net.dll を変更しないでください。それ以外は、保護されたファイルである可能性があります。これは変更できません。セキュリティ署名を無効にするには、ローカルの問題を解決するためのグローバルな解決策は、異なるバージョンのCOM dll(LiveやTestなど)で隔離された別のWebサイトを持つことができないことを意味します。
追加された 著者 Ian Boyd,
asp.netのWebサイトがisloationのためのWindowsのメカニズムを使用できない場合、それが答えです。 「いいえ、できません。ASP.netは分離バイナリをサポートしていません」と恐れてはいけません。
追加された 著者 Ian Boyd,
ああ、それは理にかなっています。アセンブリdllをコンパイルするWebサイトでのみ動作しますが。 ASP.netの設計者はアイソレーションをサポートする意図がないため、「できません」と答えています。
追加された 著者 Ian Boyd,
@IanBoyd私はグローバルな asp.net.dll については言及していません - それをすることを強くお勧めします!あなたのシナリオを正しく理解していれば、自分自身のDLLであるCOMコンポーネントをロード/使用するあなたのASP.NETアプリケーションを変更することを勧めました。
追加された 著者 Yahia,
@IanBoyd私が上に書いたように、私はこれを現在テストすることはできません...しかし、私はそれが可能(アプリケーション/コードビハインドDLLにマニフェストを置く)可能性があると思います...
追加された 著者 Yahia,
@IanBoydは明示的にこの点を明確にするために私の答えを更新しました。
追加された 著者 Yahia,
@IanBoydは私の議論に基づいて私の答えを更新しました。
追加された 著者 Yahia,