我正在尝试读取这样的ADOBD.Recordset对象(我的第一次,所以原谅我的“noobness”:D):
Presentation.Category categorySvc = new Presentation.Category();
ADODB.Recordset categories = categorySvc.ListAll("BE", "DUE", "EN", 128);
foreach (var category in categories.Fields) // here is where I get the exception
{
// ...
}
ListAll调用工作正常 - 我得到Recordset一些数据,我通过对对象执行QuickWatch确认。但是当代码到达categories.Fields时,我得到以下异常:
无法加载类型 'ADODB.FieldsToInternalFieldsMarshaler' 从汇编'TestCOMCalls, 版本= 1.0.0.0,文化=中立, 公钥=空”。
我用Google搜索了这个错误(或者只是通过'ADODB.FieldsToInternalFieldsMarshaler'找不到任何可以帮我解决问题的内容。)
我想知道,我错过了一个参考?除了正常的参考文献,我已经将这个添加到我的项目中:
ADODB Microsoft ActiveX数据对象2.5库 C:\ Windows \组件\ GAC \ ADODB \ 7.0.3300.0__b03f5f7f11d50a3a \ ADODB.dll
就像我说的那样,我之前从未这样做过,但是通过谷歌搜索,我能够看到一些人这样做(foreach on the object.Fields),它似乎适用于他们。
非常感谢任何帮助或指示:)
谢谢!
答案 0 :(得分:35)
它位于各个引用上 - 而不是项目属性中。在解决方案资源管理器窗口中,打开“参考”(在项目下),然后单击相关参考。属性窗口将有一个Embed Interop Types选项(对于每个引用)。
在Visual BAsic 2010中:
关闭嵌入互操作类型:
项目菜单>显示所有文件,解决方案资源管理器:>参考文献:> ADODB>嵌入Interof类型= False。 Microsoft.Office.Interop.Access>嵌入Interof类型= False
您现在可以发布,并且ADODB也会出现在:项目菜单>项目属性...发布TAB>申请文件
答案 1 :(得分:7)
看看我在这个问题上找到了什么。我引用了你的,但仍然无法让ADODB工作。
小小的补充:
SolutionExplorer - >查看所有文件。 对于ADODB: - 嵌入...... =假; - 复制Local = True。
答案 2 :(得分:7)
解决:
解决方案资源管理器 - >显示所有文件(菜单项) - >参与 - > Adodb - >(属性) - >嵌入互操作类型 - >假
答案 3 :(得分:4)
在VS 2013中遇到了同样的问题,解决方法是你去 参考并选择ADODB,在您将看到的属性上看到Embed Interof types = True然后将其更改为false。
答案 4 :(得分:1)
好的,我想到了如何做到这一点:
Presentation.Category categorySvc = new Presentation.Category();
ADODB.Recordset categories = categorySvc.ListAll("BE", "DUE", "EN", 128);
categories.MoveFirst();
while(!categories.EOF)
{
var fields = ((dynamic)categories).Fields;
for (int i = 0; i < fields.Count; i++)
{
var field = fields[i];
var name = field.Name;
var value = field.Value;
// ...
}
categories.MoveNext();
}
答案 5 :(得分:0)
我在清除临时文件( VS 2017 )时遇到此问题。您需要更改此异常的解决方案 Solution Explorer > References > adodb > "Then Right click and choose properties" > Embed Interop Types, set "True" to "False"