2

私は VB6 プログラマーから要件を与えられました (はい、まだ存在します)。vb6 dll を使用する vb6 アプリケーションが存在します。この dll は、別の .net dll を使用する .net dll を使用するようになりました。今私の要件は、.net dll が vb dll と同じように機能することです。つまり、vb6 dll が登録されると、他のアプリケーションで使用でき、ロールアウト時に含める必要はありません (そう言われました)。他の vb6 アプリが使用できるように、.net dll を配置する方法はありますか。私が見たところ、これは、.net dll が vb6 exe と同じフォルダーにある場合にのみ機能します。

私はこれを読みました COMプログラムは、COM相互運用のために登録された.NET DLLをどのように見つけますか?

ありがとうございました

4

1 に答える 1

5

COM は、その DLL Hell 問題でかなり悪名高いです。登録は、マシン上のすべてのプログラムに対してグローバルです。そのため、DLL を置き換えると、通常、COM サーバーを使用する他のプログラムが壊れてしまいます。

.NET にはこれに対する対策があります。Regasm.exe を実行して [ComVisible] .NET アセンブリを登録すると、デフォルトでアセンブリが GAC に配置されていると見なされます。DLL Hell 保護を自動的に購入します。ただし、特に開発マシンでは、IDE によっても行われ、/codebase オプションを使用してアセンブリを登録することは珍しくありません。

ただし、新しい問題が発生します。CLR には、依存する .NET アセンブリを見つける適切なメカニズムがありません。プローブ パスは、COM クライアントである EXE に基づいています。これが、依存アセンブリを EXE インストール ディレクトリにコピーすることが機能する理由です。

これはテストには問題ありませんが、サーバーを展開するときに使用したい一般的なソリューションではありません。COM サーバーを使用する EXE とその場所を正確に予測することはできません。また、他の誰かが所有するプログラムのインストール ディレクトリをいじることは、しばしば政治的に困難です。

GAC を使用すると、すべての問題が解決されます。

于 2012-08-13T14:58:39.360 に答える