1

サードパーティの相互運用ライブラリ (AutoCad) の異なるバージョンを切り替えるアプリがあります。使用する相互運用 API のサブセットは、相互運用ライブラリのすべてのバージョンで同じです。

クライアント コードを再利用しながら異なるバージョンのライブラリを参照する最も効果的な方法は何ですか?

1 つの方法は、リフレクションを使用することです。使用される相互運用インターフェイスごとにラッパー タイプを定義し、ラッパー内でリフレクションを使用して、相互運用アセンブリの指定されたバージョンから相互運用タイプを読み込み、相互運用オブジェクトへのすべての呼び出しをプロキシします。使用されるサブセット内のすべてのインターフェイスが相互運用のすべてのバージョンでまったく同じである場合、このアプローチは無駄に思えます。

他のアプローチは、プロジェクトのさまざまな構成でさまざまな相互運用アセンブリを参照することです。相互運用アセンブリ全体で同一のインターフェイスを使用すると、相互運用アセンブリのバージョンごとに異なるバージョンのクライアント アセンブリをコンパイルできるようになります。このアプローチで実装する方法がわからないことの 1 つは、プロジェクトを構成して、クライアント アセンブリのすべてのバージョンを同時にビルドし、それらすべてを 1 つのディストリビューションに含めることです。

ここでもコード生成を使用できるはずですが、それがどれほど難しいかはわかりません。

この種の問題をどのように解決しますか?

ありがとう!

4

3 に答える 3

2

AutoCAD 2013より前のバージョンの場合、実際には、1つの相互運用機能アセンブリを参照して同じ出力アセンブリを出荷するだけで済みます。AutoCAD相互運用機能アセンブリは厳密に署名されておらず、特定のバージョンを必要としません。何年にもわたって変更されたAPIがいくつかあります。これらは、リフレクションまたは正しい相互運用機能アセンブリを参照する「サブ」アセンブリのいずれかによって解決できます。

AutoCAD 2013は、相互運用ライブラリを大幅に変更しました。GUIではできないため、プロジェクトファイルを手動で編集する必要がある構成ごとに異なるアセンブリを参照するか、同じソリューション内にある2つの異なるプロジェクトをセットアップして異なるアセンブリを参照することができます。ファイルを複製しないように、あるプロジェクトから別のプロジェクトにファイルをリンクすることができます。

私は両方のテクニックを使用しましたが、どちらがより効果的に機能するかは状況によって異なります。

于 2012-06-06T16:48:07.533 に答える
0

私はあなたの最初のアプローチの修正版を使います。独自のインターフェースを定義して、いつでもそれを参照できるようにします。コンストラクターから渡されたライブラリーをロードする単一の実装があります。コンストラクターは、リフレクションを介して相互運用機能アセンブリオブジェクトのインスタンスをインスタンス化し、それをプライベートメンバーフィールドに保存します。オブジェクトを実装するためのメソッドは、リフレクションを使用してオブジェクトのメソッドを呼び出します。

于 2012-06-06T16:50:35.403 に答える
0

場合によります。AutoCAD Interop の少数のインタフェースのみを呼び出す場合は、リフレクションまたは後でバインディングを使用することをお勧めします。このように、関心のあるすべての AutoCAD バージョンですべてのインターフェイスが同じであると述べたので、異なる AutoCAD バージョン、異なる COM 参照などについて心配する必要はありません。

多数の COM 呼び出しがある場合、リフレクションまたは COM の後でバインディングが非常に面倒で、エラーが発生しやすいことに気付く場合があります。このように、異なる AutoCAD 用に異なるビルドを作成することは悪い考えではないように思えますが、それらの COM インターフェイスはまったく同じかもしれません。これらすべてのビルドを同時に作成するという点では、いくつかの異なるプロジェクト構成を単一のソリューションに生成するか、いくつかの MAKE ファイルを使用することをお勧めします。

于 2012-06-18T23:28:26.167 に答える