ADODB не смог загрузить тип ‘ADODB.FieldsToInternalFieldsMarshaler’ из сборки

#activex #adodb

#activex #adodb

Вопрос:

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

Не удалось загрузить тип ‘ADODB.FieldsToInternalFieldsMarshaler’ из сборки ‘TestCOMCalls, версия=1.0.0.0, Культура = нейтральная, PublicKeyToken=null’.

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

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

Библиотека ADODB Microsoft ActiveX Data Objects 2.5 C:WINDOWSassemblyGACADODB7.0.3300.0__b03f5f7f11d50a3aADODB.dll

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

Мы высоко ценим любую помощь или указания 🙂

Спасибо!

Ответ №1:

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

В Visual BAsic 2010:

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

Меню проекта> Показать все файлы, обозреватель решений: > Ссылки: > ADODB > Внедрить Interof types = False. Майкрософт.Офис.Взаимодействие.Доступ> Встраивание между типами = False

Теперь вы сможете публиковать, а также ADODB появится в: Меню проекта> Свойства проекта… ВКЛАДКА Публикации> Файлы приложения

Комментарии:

1. Это помогло и мне. Если мне не изменяет память, CopyLocal был автоматически изменен на True, как только я установил для EmbedInterofTypes значение False, чего я не ожидал.

Ответ №2:

Решаемая:

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

Ответ №3:

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

Маленький для добавления:

SolutionExplorer —> Просмотреть все файлы. Для ADODB: — Встроить… = False; — Копировать локально = True.

Ответ №4:

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

Комментарии:

1. Подробнее: Разверните проект, разверните ссылки, выберите ADODB, щелкните правой кнопкой мыши, выберите Свойства.

Ответ №5:

У меня возникла эта проблема при очистке временного файла (по сравнению с 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();
}