ADODBC не удалось загрузить тип 'ADODB.FieldsToInternalFieldsMarshaler' из сборки - PullRequest
18 голосов
/ 14 апреля 2011

Я пытаюсь прочитать объект 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 на объекте.Но когда код достигает категорий. Поля я получаю следующее исключение:

Не удалось загрузить тип 'ADODB.FieldsToInternalFieldsMarshaler' из сборки 'TestCOMCalls, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken =null '.

Я погуглил эту ошибку (или просто' ADODB.FieldsToInternalFieldsMarshaler 'и не смог найти ничего, что помогло бы мне с проблемой).

Интересно, яотсутствует ссылка?Помимо обычных ссылок, я добавил этот к своему проекту:

ADODB Объекты данных Microsoft ActiveX 2.5 Библиотека C: \ WINDOWS \ assembly \ GAC \ ADODB \ 7.0.3300.0__b03f5f7f11d50a3a \ ADODB.dll

Как я уже сказал, я никогда не делал этого раньше, но, немного погуглив, я смог увидеть, как некоторые люди делают это (foreach на объекте. Поля), и, похоже, это работает для них.

Любая помощь или направление очень ценится:)

Спасибо!

Ответы [ 6 ]

36 голосов
/ 18 октября 2012

Это по отдельным ссылкам - не в свойствах проекта.В окне обозревателя решений откройте «Ссылки» (под проектом) и нажмите на соответствующую ссылку.В окне свойств будет опция «Встраивать типы взаимодействия» (для каждой ссылки).

В Visual BAsic 2010:

Чтобы отключить «Встраивать типы взаимодействия»:

Меню проекта>Показать все файлы, Обозреватель решений:> Ссылки:> ADODB> Вставить Interof types = False.Microsoft.Office.Interop.Access> Embed Interof types = False

Теперь вы сможете публиковать, а также ADODB появится в: Меню проекта> Свойства проекта… Опубликовать TAB> Файлы приложения

9 голосов
/ 25 февраля 2016

Решено:

Обозреватель решений -> Показать все файлы (пункт меню) -> Ссылки -> Adodb -> (свойства) -> Типы вставки взаимодействия -> Ложь.

7 голосов
/ 12 марта 2014

Посмотрите, что я нашел по этому вопросу здесь.Я ссылался на ваш, но все еще не мог заставить ADODB работать.

Мало что добавить:

SolutionExplorer -> Просмотреть все файлы.Для ADODB: - Embed ... = False; - Copy Local = True.

4 голосов
/ 17 мая 2016

У вас такая же проблема в VS 2013, и решение для этого заключается в том, что вы идете в References и выбираете ADODB, в свойствах вы увидите Embed Interof types = True, затем измените его на false.

1 голос
/ 26 мая 2019

У меня проблема с очисткой временного файла ( VS 2017 ). Решение для этого исключения вам нужно изменить Solution Explorer > References > adodb > "Then Right click and choose properties" > Embed Interop Types, set "True" to "False"

1 голос
/ 14 апреля 2011

Хорошо, я понял, как это сделать:

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