7

関連する COM DLL のローカル コピーを相互運用アセンブリに強制的に参照させることはできますか?

シナリオは次のとおりです。

COM DLL (HP Quality Center のオートメーション API である OTAClient.dll) の相互運用である相互運用アセンブリ (Interop.OTAClient.dll) を参照する .NET アプリがあります。私は COM についてあまり詳しくありませんが、相互運用機能アセンブリは、特定のファイルを指すのではなく、レジストリの GUID 参照を介して COM クラスを検索することを理解しています。

私が抱えている問題は、レジストリ キーが指す OTAClient.dll のコピーが、ブラウザにログインしたばかりの QC のバージョンに応じて異なるバージョンによって上書きされ、これらの DLL の異なるバージョンは互換性がないことです。お互い。.NET アプリは特定のバージョンの QC にのみ接続するため、COM DLL をこのように変更することはできません。

この行動は本当にイライラするので、どんな提案でも大歓迎です。COM 相互運用の問題に関する他の質問を見てきましたが、それらはすべて、実際の COM DLL を含むこの特定のシナリオではなく、相互運用 DLL のローカル バージョンを GAC の代わりに強制的に使用することに関するものであるようです。

4

3 に答える 3

10

Pavel は私に正しい方向を示してくれたので、彼を答えとしてマークします。他のすべての人のために、私がしたことは次のとおりです。

  1. 元の OTAClient.dll への参照を追加し、Visual Studio で相互運用ライブラリを生成できるようにしました。
  2. ソリューション エクスプローラーで参照されているライブラリを右クリックし、[プロパティ] をクリックします。次に、Isolated を True に設定します。これにより、VS はマニフェスト ファイルを生成し、レジストリにリストされているものではなく、COM ライブラリをローカルで検索するようプログラムに指示します。
  3. 私のシナリオに固有 - Quality Center から WebClient.dll を参照し、そのために Isolated を True に設定する必要もありました。これは、OTA API を使用するアプリによって直接使用されることはありませんが、OTAClient.dll によって参照されるようです。

このようにして、アプリで使用されているバージョンとは異なるバージョンの QC インスタンスに、アプリを壊すことなくログインおよびログアウトできます。私の場合、v9 でプロジェクト固有の自動化に使用されるローカル QC インスタンスがあり (さまざまな理由から、ニーズを満たすために大幅にカスタマイズされており、スクリーンショットの保存用に十分なスペースがあるなど)、アプリケーションが接続されています。ただし、手動でテストするには、IE を使用して別の場所にある v9.2 インスタンスにログインする必要もあります。以前に v9.2 インスタンスにログインしていた場合は、IE で v9 インスタンスを開き、アプリを再度実行する前にコントロールを再ダウンロードする必要がありましたが、今は必要ありません。:)

于 2009-08-16T04:29:25.167 に答える
5

登録不要のCOMが必要です。

于 2009-07-29T08:58:35.833 に答える
1

Isolated プロパティを true に設定した後に Web.config がどのように変化するかを示す小さな例は、Isolated プロパティを true に設定したときに実際に何が起こっているかを他の人が理解するのに役立ちます。VS は、特定の CLSID の com Dll を使用するように、実際にはコードに数行入力します。

実際、同じサーバーに 2 つの .Net アプリケーションがあり、1 つのアプリケーションは Quality Center 10.0 Dll を使用し、もう 1 つのアプリケーションは Quality Center ALM 11.0 にアップグレードされています。したがって、同じサーバーに同じ名前の DLL を登録することはできません。

于 2012-01-21T09:29:37.237 に答える