4

我开发了一个具有以下特点的 .NET 类库:

  • .NET 4.0,任何 CPU
  • adodb.dll.NET Primary Interop Assembly 文件夹中的引用
  • 设置为 true的构建Embed Interop Type(默认)
  • 公开 ADODB.RecordSet 以供 COM 使用。

我通过 VSTO 插件将程序集公开给 VBA。它在我的机器上运行良好,但在客户端机器上,我的程序集System.TypeLoadException在尝试访问 a 的Fields属性时会抛出 a RecordSet

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 TypesFalse,一切都开始像魔术一样工作。

所以我的问题变成了“为什么嵌入互操作不起作用?” 我认为这是避免客户端机器出现问题的最佳做法。

4

0 回答 0