ADODBC не может загружать тип "ADODB.FieldsToInternalFieldsMarshaler" из сборки

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

Не удалось загрузить тип 'ADODB.FieldsToInternalFieldsMarshaler' от сборки 'TestCOMCalls, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = NULL".

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

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

ADODB Microsoft ActiveX Data Objects 2.5 Библиотека C:\WINDOWS\сборка\GAC\ADODB\7.0.3300.0__b03f5f7f11d50a3a\adodb.dll

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

Любая помощь или руководство приветствуются:)

Спасибо!

Ответы

Ответ 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();
}

Ответ 2

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

В Visual Basic 2010:

Чтобы отключить типы вложений Interop:

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

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

Ответ 3

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

Мало кто добавит:

SolutionExplorer → Просмотр всех файлов. Для ADODB: - Вставить... = False; - Копировать Local = True.

Ответ 4

Решено:

Solution Explorer → Показать все файлы (Пункт меню) → Референции → Adodb → (свойства) → Вставить типы взаимодействия → False.

Ответ 5

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

Ответ 6

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

Ответ 7

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