ADODBC不能从程序集中加载"ADODB.FieldsToInternalFieldsMarshaler"类型

Wag*_*lva 22 activex adodb

我正在尝试读取这样的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
{
   // ...
}
Run Code Online (Sandbox Code Playgroud)

ListAll调用工作正常 - 我得到Recordset一些数据,我通过对对象执行QuickWatch确认.但是当代码到达categories.Fields时,我得到以下异常:

无法从程序集"TestCOMCalls,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"加载类型"ADODB.FieldsToInternalFieldsMarshaler".

我用谷歌搜索了这个错误(或者只是通过'ADODB.FieldsToInternalFieldsMarshaler'找不到任何可以帮助我解决问题的东西).

我想知道,我错过了一个参考?除了正常的引用,我已经将这个添加到我的项目中:

ADODB Microsoft ActiveX数据对象2.5库C:\ WINDOWS\assembly\GAC\ADODB\7.0.3300.0__b03f5f7f11d50a3a\ADODB.dll

就像我说的那样,我以前从未这样做过,但通过谷歌搜索,我能够看到一些人这样做(foreach on the object.Fields),它似乎适合他们.

非常感谢任何帮助或方向:)

谢谢!

Bob*_*Bob 40

它位于各个引用上 - 而不是项目属性中.在解决方案资源管理器窗口中,打开"参考"(在项目下),然后单击相关参考.属性窗口将有一个Embed Interop Types选项(对于每个引用).

在Visual BAsic 2010中:

要关闭嵌入互操作类型:

项目菜单>显示所有文件,解决方案资源管理器:>参考:> ADODB>嵌入间隔类型= False.Microsoft.Office.Interop.Access> Embed Interof types = False

您现在可以发布,ADODB也将出现在:项目菜单>项目属性...发布选项卡>应用程序文件


小智 11

解决了:

Solution Explorer - >显示所有文件(菜单项) - > Referances - > Adodb - >(properties) - > Embed Interop Types - > False.


And*_*ODE 7

看看我在这个问题上找到了什么.我引用了你的,但仍无法让ADODB工作.

很少添加:

SolutionExplorer - >查看所有文件.对于ADODB: - 嵌入... =错误; - 复制Local = True.


小智 7

我在清除临时文件( VS 2017)时遇到了这个问题。您需要更改此异常的解决方案 Solution Explorer > References > adodb > "Then Right click and choose properties" > Embed Interop Types, set "True" to "False"


小智 5

在VS 2013中遇到了相同的问题,解决方案是转到“引用”并选择ADODB,在属性上,您将看到Embed Interof types = True,然后将其更改为false。


Wag*_*lva 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();
}
Run Code Online (Sandbox Code Playgroud)