Исключение "Не удалось загрузить файл или сборку" Microsoft.Practices.EnterpriseLibrary.Validation
В настоящее время я получаю следующее исключение при попытке использовать блок приложения проверки библиотеки предприятия:
Произошла ошибка при создании обработчика раздела конфигурации для проверки: не удалось загрузить файл или сборку 'Microsoft.Practices.EnterpriseLibrary.Validation, версия =4.1.0.0, Culture= нейтральный, PublicKeyToken=31bf3856ad364e35' или одна из его зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) (C:\Documents and Settings\ Мои документы \Visual Studio 2008\Projects\Testers\TestProject\web.config строка 12)
Я знаю, что пытается сказать исключение, но я не могу понять, как это исправить. Я только когда-либо устанавливал одну версию Enterprise Library, и это она (4.1.0.0), поэтому я не понимаю, как она могла найти неправильную версию, поэтому я представляю, что это проблема зависимости. Я включил библиотеки Common, Validation и ObjectBuilder2 из Enterprise Library 4.1 в качестве ссылок в проекте, поэтому я не уверен, что еще мне не хватает. Документация определенно указывает на то, что это все, что мне нужно.
Есть ли способ отследить, в чем проблема зависимости?
Если это помогает, я пытаюсь использовать Средство конфигурирования Enterprise Library для создания набора правил блока приложения проверки для проверки данных в сущности Entity Framework. Я использую ASP.NET MVC в Visual Studio 2008.
Спасибо за любую помощь / направление, которое вы можете предоставить,
Крис
1 ответ
Включите ведение журнала Fusion и посмотрите, какая сборка будет связана во время выполнения.
Недавно у Хансельмана появилось сообщение, которое должно помочь в регистрации и проверке результатов.
http://www.hanselman.com/blog/CommentView.aspx?guid=3654c8f3-c5c3-4dee-a01f-c9a8da3ef2fa
Еще одно важное отличие, которое следует сделать, состоит в том, что ссылки, добавляемые в проект, являются ссылками во время компиляции и не влияют на способ, которым код связан во время выполнения, кроме как для указания строгого имени, если использовалась сборка со строгим именем. Чтобы выяснить, что происходит во время выполнения, вам нужно просмотреть журналы привязки. В журнале должны быть показаны все попытки, которые среда выполнения делает при поиске сборки. Если сборка не находится в каталоге bin вместе с вашим возможным, она, скорее всего, ищет в GAC и находит версию, которую она не ожидает.
Обратите внимание, что компилятор НЕ использует GAC при обращении к сборкам. Так что, скорее всего, у вас есть другая версия, используемая в качестве ссылки в проекте, чем вы установили в GAC.
Кроме того, очень легко узнать, какую версию вы установили в GAC, посмотрев в C:\Windows\assembly с помощью Windows Explorer. Версия, указанная в вашем сообщении об ошибке, будет версией, на которую ссылались во время компиляции. Если эти версии не совпадают, это может быть вашей проблемой, если предположить, что Fusion действительно просматривает GAC (что будет видно по журналу Fusion).
Том Холландер (Tom Hollander), один из разработчиков Enterprise Library, написал интересную статью об этом в своем блоге: как избежать ошибок конфигурации с несовместимыми копиями Enterprise Library. Обязательное чтение для всех, начиная с Enterprise Library.