2

サードパーティ API の一部として提供された TLB があります。TLBIMP.exe を使用して DLL アセンブリ ラッパーを生成しました。ただし、開発時には、アセンブリを使用するには regsvr32 に登録する必要があるようです。

ただし、これは開発時には問題になりません。私は本番環境でマネージド インスタンスを使用しており、デプロイ時に DLL を手動で登録することは、不可能ではないにしても面倒です。展開時に登録手順を必要としない方法でマネージ DLL アセンブリを使用する方法はありますか?

私はインターネットを読んでいて、app.manifest を使用した登録不要の COM に関する文献をいくつか見つけました。これは実行可能な解決策でしょうか?

4

2 に答える 2

1

タイプ ライブラリがサード パーティ製の COM DLL に埋め込まれている場合、Isolated COMを実際に使用できます (OleView で確認できます)。この方法で COM DLL を使用することは、VS2010/2012 では非常に簡単です。DLL は開発マシンに登録する必要があります。次に、それを .NET プロジェクトへの参照として追加しEmbed Interop TypesIsolatedプロパティを有効にします。

ここに画像の説明を入力

相互運用アセンブリは、消費する .NET アセンブリとマージされます。デプロイ時に、COM DLL、.NET アセンブリ、および生成された.manifestファイルが一緒にコピーされることを確認するだけで済みます。

クライアント アプリの COM アパートメント モデルを考慮することは非常に重要です。STA クライアントに問題はないはずです。ただし、MTA モデルの場合、分離された DLL によって作成された COM オブジェクトに対して、既定の typelib ベースのマーシャラーが機能しない場合があります (詳細はこちら)。DLL に COM プロキシ/スタブ コードが実装されている場合、これも問題にはなりません。

于 2013-08-29T10:30:51.587 に答える
0

悲しいことに、いいえ。ターゲット DLL は COM DLL であるため、展開先の各ボックスに登録する必要があります。展開用のインストール パッケージを作成していると仮定すると、良いニュースは、ほとんどのインストーラー ツールセットが、すぐに使用できる COM 登録をサポートする必要があるということです。インストーラーのドキュメントを確認してください。

xcopy多数のボックスに展開している場合は、戦略を再考する時期に来ていると言えます。これに関して唯一安心できる点は、COM DLL をボックスごと、展開されたバージョンごとに 1 回だけ登録する必要があることです。それでも、xcopy最近ではインストールは一般的に悪い考えです。

更新:私は訂正されたままです -- 私は Noseratio に投票しています。最近、私が COM 統合にどれほど注意を払っていないかを示しています。

于 2013-08-28T21:53:10.993 に答える