Я недавно обновил наш проект до версии 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 непосредственно в веб-проект. Теперь я могу без проблем удалить ссылку, добавленную в первой попытке.
(мне не особо нравится иметь такую ссылку в этом конкретном проекте, но эй!): -)