【问题标题】:ADODBCould not load type 'ADODB.FieldsToInternalFieldsMarshaler' from assemblyADODBC 不能从程序集中加载类型“ADODB.FieldsToInternalFieldsMarshaler”
【发布时间】:2011-08-05 16:39:19
【问题描述】:

我正在尝试读取这样的 ADOBD.Recordset 对象(我的第一次,请原谅我的“菜鸟”: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,文化=中性, PublicKeyToken=null'。

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

我想知道,我是否缺少参考?除了正常的引用,我还把这个添加到我的项目中:

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

就像我说的,我以前从未这样做过,但通过谷歌搜索,我能够看到有些人这样做(在 object.Fields 上进行 foreach),这似乎对他们有用。

非常感谢任何帮助或指导:)

谢谢!

【问题讨论】:

    标签: activex adodb


    【解决方案1】:

    它在单个引用上 - 而不是在项目属性中。在解决方案资源管理器窗口中,打开“参考”(在项目下),然后单击有问题的参考。属性窗口将有一个嵌入互操作类型的选项(对于每个引用)。

    在 Visual BAsic 2010 中:

    要关闭嵌入互操作类型:

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

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

    【讨论】:

    • 这对我也有用。如果我没记错的话,只要我将 EmbedInterofTypes 设置为 False,CopyLocal 就会自动翻转为 True,这是我没想到的。
    【解决方案2】:

    已解决:

    Solution Explorer --> Show all files (Menu Item) --> References --> Adodb -->(properties) -->Embed Interop Types --> False.

    【讨论】:

      【解决方案3】:

      在这里查看我在这个问题上的发现。我引用了你的,但仍然无法让 ADODB 工作。

      补充一点:

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

      【讨论】:

        【解决方案4】:

        在 VS 2013 中遇到了同样的问题,解决方案是你去 References 并选择 ADODB,在属性上你会看到 Embed Interof types = True 然后将其更改为 false。

        【讨论】:

        • 更多细节:展开项目,展开引用,选择ADODB,右键,选择属性。
        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          好的,我想出了如何做到这一点:

          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();
          }
          

          【讨论】:

            猜你喜欢
            • 2011-09-07
            • 1970-01-01
            • 1970-01-01
            • 2012-05-05
            • 1970-01-01
            • 2016-09-27
            • 2010-11-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多