2013-02-19 2 views
2

У меня возникла странная проблема с dll C# .NET 4.0 (работает с приставкой/тестовым приложением), работающим с базой данных Firebird. Установка кажется правильным, но когда Firebird (2.5.2 я думаю) клиент/DLL/поставщик должен бросить исключение, я всегда получаю следующее:Получение TypeLoadException вместо специальных исключений Firebird DB

Failure: System.TypeLoadException: Не удалось загрузить тип 'System.Runtime.CompilerServices.ExtensionAttribute' из сборки 'mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'.

Так, например, если я изменю строку подключения, чтобы не указывать на мой файл DB, это даст это исключение вместо того, что более актуально. Это происходит независимо от того, отлаживаю ли я его из Visual Studio 2010 или запускаю ли EXE вручную.

Существует еще один человек, работающий над тем же кодом, у которого нет этой проблемы, поэтому похоже, что это не связано с кодом.

Кто-нибудь видел или слышал о чем-то подобном? Мне становится сложно догадаться, что такое исключение пытается рассказать мне.

UPDATE: Итак, похоже, что все x86, так что это не похоже на несоответствие битов. И я проверил и дважды проверил, что у меня есть правильная версия провайдера (например, NETProvider-3.0.2-Net40). Я все еще получаю исключение TypeLoadException.

Для справки, если это кого-то вдохновляет, я запускаю 32-разрядную версию Windows XP. Другой человек, который получает релевантные/реальные исключения, находится в Windows 7 (возможно, 64 бит).

+0

ли вы сравнили клиент Firebird установить на сотрудников, есть ли различия? Один файл для поиска - «firebird.msg», где хранятся сообщения об ошибках FB (должно быть в том же каталоге, что и клиентская dll), есть ли у вас это? – ain

ответ

0

Обычно вы получаете эту ошибку, если у вас есть несоответствие по битте. Убедитесь, что и ваш драйвер Firebird (и все зависимые DLL-файлы ниже по течению), и ваш исполняемый файл установлены на одну и ту же битту.

+0

Теперь, когда вы упомянули об этом, это вполне может быть проблемой. Я проверю это завтра. – DAG

2

Проблема в том, что вы используете версию .NET 4.5 поставщика Firebird .NET в системе .NET 4. Microsoft сделала .NET 4.5 обновлением на месте, сохраняя его в версии 4.0.0.0, и в то же время перемещаясь вокруг таких вещей, как System.Runtime.CompilerServices.ExtensionAttribute, до mscorlib, чтобы иметь возможность использовать методы расширения в mscorlib. Когда компилируемая версия .NET 4.5 работает на .NET 4, она не может найти класс, потому что она находится в другой библиотеке, чем ожидалось.

Итог: убедитесь, что вы установите версию .NET 4 (NETProvider-3.0.2.0-NET40.7z) от http://www.firebirdsql.org/en/net-provider/

Эта информация также описывается на this blog (ссылаетесь кэш Google, как этот блог в настоящее время нарушиться original link)

0

Пробовал с различными версиями провайдеров firebug, наконец обновление .NET до 4.5 на сервере работало для меня.

.NET 4.5 скачать: http://go.microsoft.com/?linkid=9810134

Смежные вопросы