我开发了一个具有以下特征的.NET类库:
adodb.dll
Embed Interop Type
设置为true(默认)我通过VSTO AddIn将程序集暴露给VBA。它在我的机器上运行正常,但在客户端计算机上,当我尝试访问System.TypeLoadException
的{{1}}属性时,我的程序集会抛出Fields
。
RecordSet
异常消息:
public Recordset Test() {
Recordset result = new Recordset();
result.CursorLocation = CursorLocationEnum.adUseClient;
Fields resultFields = result.Fields; // EXCEPTION THROWN HERE.
...
}
。
失败的客户:Win XP / 32,Win 7/64。没有本地管理员权限。两者都有.NET 4.0
更新 :This Post描述了我的问题。接受的答案(后期绑定)对我不起作用,但鲍勃的回答确实如此(不要嵌入Interop)。
一旦我将Could not load type 'ADODB.FieldsToInternalFieldsMarshaler' from assembly 'MyCompany.MyProduct.Interop.Com
设置为Embed Interop Types
,一切都开始像魔术一样运作。
所以我的问题已经改为“为什么嵌入互操作不起作用?”我认为这是避免客户机问题的最佳做法。