4

次の特徴を持つ .NET クラス ライブラリを開発しました。

  • .NET 4.0、任意の CPU
  • adodb.dll.NET Primary Interop Assembly フォルダーからの参照
  • true に設定してビルドしEmbed Interop Typeます (デフォルト)
  • COM によって使用される ADODB.RecordSet を公開します。

VSTO アドインを介してアセンブリを VBA に公開します。私のマシンでは正常に動作しますが、クライアント マシンでは、アセンブリが aのプロパティSystem.TypeLoadExceptionにアクセスしようとすると、 a がスローされます。FieldsRecordSet

public Recordset Test() {
    Recordset result = new Recordset();
    result.CursorLocation = CursorLocationEnum.adUseClient;
    Fields resultFields = result.Fields; // EXCEPTION THROWN HERE.
    ...
}

例外メッセージ:

Could not load type 'ADODB.FieldsToInternalFieldsMarshaler' from assembly 'MyCompany.MyProduct.Interop.Com.

失敗したクライアント: Win XP/32、Win 7/64。どちらもローカル管理者権限を持っていません。どちらも.NET 4.0


更新この投稿は私の問題について説明しています。受け入れられた回答(遅延バインディング)はうまくいきませんでしたが、ボブの回答はうまくいきました(相互運用機能を埋め込まないでください)。

Embed Interop Typesに設定するとすぐにFalse、すべてが魔法のように機能し始めました。

それで、私の質問は「相互運用機能の埋め込みが機能しないのはなぜですか?」に変わりました。クライアント マシンでの問題を回避するためのベスト プラクティスだと思いました。

4

0 に答える 0