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"