Не мог загрузить файл или блок в NHibernate

Я делаю это все время. При использовании ADO Вы действительно не используете Доступ, но Струю, базовую базу данных. Это означает, что кто-либо с Excel может использовать приложение - Доступ, не требуемый. О, я должен упомянуть, место, я работаю, купило набор лицензий Малого бизнеса Office - никакой Доступ. До работы здесь, я предположил бы, что у любого, у кого был Excel, также будет Доступ. Не так.

я создаю один класс для каждой таблицы в Доступе. Я очень редко выполняю запросы через ADO, вместо этого я сохраняю ту логику в модулях класса. Я читал в с оператором SELECT и выписываю с и ОБНОВЛЯЮ или ВСТАВЛЯЮ использование Выполнить метода объекта ADODB.Connection.

Видят http://www.dailydoseofexcel.com/archives/2008/12/21/vba-framework-ii/

, если Вы хотите видеть, как я установил свой кодекс.

Для ответа на вопросы: Это будет небольшая кривая обучения для Вас, если Вы уже будете знать Excel VBA, но будет некоторое обучение сделать; Вы заплатите потерю производительности по выполнению всего этого в Доступе, но дело не в этом плохой и только можно решить, стоит ли это того; и у Вас может быть несколько человек, получающих доступ к базе данных.

15
задан Peter Mortensen 29 April 2012 в 01:33
поделиться

9 ответов

Эти файлы должны находиться в том же каталоге, что и указанный файл, NHibernate.dll:

  • Antlr3.Runtime.dll
  • Iesi .Collections.dll
  • log4net.dll
  • Castle.Core.dll
  • Castle.DynamicProxy2.dll

Также вы должны добавить ссылку или скопировать ее:

  • NHibernate.ByteCode.Castle. dll
14
ответ дан 1 December 2019 в 01:17
поделиться

Похоже, dll NHibernate не копируется в каталог bin вашего приложения. Убедитесь, что на него есть ссылка и он существует в каталоге bin.

-1
ответ дан 1 December 2019 в 01:17
поделиться

NHibernate имеет несколько других сборок, кроме nhibernate.dll . Были ли у вас все они (из одного выпуска)?

0
ответ дан 1 December 2019 в 01:17
поделиться

Вы должны сослаться на зависимые сборки (я предполагаю, что это «NHibernate.ByteCode.Castle») и установить для их атрибута «copy local» значение true.

0
ответ дан 1 December 2019 в 01:17
поделиться

Вероятно, у вас есть код, ссылающийся на две разные версии библиотеки NHibernate. Версия NHibernate.dll, которую вы загружаете с NHibernate, скорее всего, отличается от той, которую вы загружаете, скажем, с Castle ActiveRecord. Попробуйте использовать только ту версию библиотеки DLL NHibernate, которая поставляется с NHibernate.ByteCode.Castle. И убедитесь, что у вас нет библиотеки DLL NHibernate (любой версии) в вашем GAC (по крайней мере, пока вы не решите эту проблему).

1
ответ дан 1 December 2019 в 01:17
поделиться

Полагаю, вы недавно обновили NHibernate до 2.1?

Если так, то я предполагаю, что у вас есть разные проекты, ссылающиеся на разные версии NHibernate.

Это случилось со мной, и это сложнее чтобы отследить, чем вы думаете.

Вот шаги, которые я предпринял для решения этой проблемы:

  1. Удалите все файлы во всех каталогах bin в ваших проектах. Обычно для этого хорошо работает Clean Solution, но это не так. Возможно, вам придется сделать это с помощью вызова командной строки или вручную
  2. Отредактируйте все ваши файлы .csproj. Отредактируйте их в текстовом редакторе или выполните Unload Project, а затем отредактируйте файл .csproj.
  3. Убедитесь, что ВСЕ ваши узлы HintPath указывают на одну и ту же (новую) версию DLL.

Это, надеюсь, устранит эту проблему для вы.

5
ответ дан 1 December 2019 в 01:17
поделиться

Недавно я обновил наш проект до версии 1.0 RTM FluentNHibernate, для которой требовались последние биты NHibernate. Это привело к той же проблеме, что и у вас.

Структура нашего проекта была примерно такой:

Repository root
    Solution
        Web
            References
                DataAccess
        ... other projects/layers ...
        DataAccess
            References
                ..\ReferenceAssemblies\NHibernate.dll
                ..\ReferenceAssemblies\FluentNHibernate.dll
    ReferenceAssemblies

(Все внешние библиотеки DLL находятся в каталоге ReferenceAssemblies.)

Моя первая попытка решить проблему была добавление ссылки на NHibernate.ByteCode.Castle.dll в проект DataAccess. Это сработало ... но только в разработке ...

Когда я опубликовал веб-приложение на нашем сервере приемочного тестирования клиентов (что происходит автоматически с помощью TeamCity и скрипта, содержащего вызов aspnet_compiler) .exe), NHibernate.ByteCode.Castle.dll нигде не было найдено.

Я не уверен , почему это происходит, но я подозреваю, что это как-то связано с тем фактом, что никакой код в нашем приложении на самом деле не вызывает код в этой конкретной dll. Кроме того, (поправьте меня, если я ошибаюсь) нет жестко запрограммированной ссылки из NHibernate.dll на NHibernate.ByteCode.Castle, поэтому где-то ниже (предположительно неиспользуемая) dll упускается из виду.

Второй (и успешно) попытка заключалась в том, чтобы добавить ссылку на отсутствующую dll прямо в веб-проект. Теперь я могу без проблем удалить ссылку, которую добавил с первой попытки.

(Мне не очень нравится иметь такую ​​ссылку в этом конкретном проекте, но эй!): -)

2
ответ дан 1 December 2019 в 01:17
поделиться

В моем случае «Чистое решение», за которым следовало «Восстановить решение», решило проблему.

3
ответ дан 1 December 2019 в 01:17
поделиться

У меня тоже была эта проблема.

Для меня проблема заключалась в том, что FluentNHibernate ожидал другую версию NHibernate (2.1.0.4000), чем я включал в проект (2.1.2.4000). Я наткнулся на это, скачивая по отдельности последние выпуски каждой библиотеки.

Чтобы решить эту проблему, я изменил ссылку на NHibernate, указав на старую версию NHibernate, поставляемую с FluenNHibernate 1.0 RTM (2.1.0.4000).

Другим решением может быть явная установка привязок сборки из файла app.config.

4
ответ дан 1 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: