Entity Framework 5 - Не удалось загрузить файл или сборку EntityFramework, Version = 5.0.0.0
Я пытаюсь использовать Entity Framework 5 для своего проекта, но у меня, похоже, есть проблема, связанная с установкой сборки. И так как я установил это изначально с помощью nuget, я не уверен, что мне нужно сделать, чтобы заставить это работать, как я ожидаю. Любая помощь в том, что мне нужно сделать, чтобы исправить эту проблему, пожалуйста?
* System.IO.FileNotFoundException: Не удалось загрузить файл или сборку EntityFramework, Version = 5.0.0.0, Culture = Neutral, PublicKeyToken = b77a5c561934e089 'или одна из его зависимостей. Система не может найти указанный файл. WRN: Регистрация привязки к сборке выключен. Чтобы включить регистрацию сбоев привязки сборок, установите значение register., *
, используя журнал слияния, я получил
*** Assembly Binder Log Entry (7/17/2012 @ 9:29:09 PM) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 11.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\TESTWINDOW\vstest.executionengine.x86.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = WORKALOT\Tokorie
LOG: DisplayName = Budget.Data, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///C:/Development/Summer2012BudgetApp/Budget.Service.Test/bin/Release
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = vstest.executionengine.x86.exe
Calling assembly : Budget.Lib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 11.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\TESTWINDOW\vstest.executionengine.x86.exe.Config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Development/Summer2012BudgetApp/Budget.Service.Test/bin/Release/Budget.Data.DLL.
LOG: Attempting download of new URL file:///C:/Development/Summer2012BudgetApp/Budget.Service.Test/bin/Release/Budget.Data/Budget.Data.DLL.
LOG: Attempting download of new URL file:///C:/Development/Summer2012BudgetApp/Budget.Service.Test/bin/Release/Budget.Data.EXE.
LOG: Attempting download of new URL file:///C:/Development/Summer2012BudgetApp/Budget.Service.Test/bin/Release/Budget.Data/Budget.Data.EXE.
LOG: All probing URLs attempted and failed.
Ответы
Ответ 1
Запустите инструмент журнала слияния, как было предложено сообщением об ошибке, чтобы получить дополнительную информацию о том, где среда выполнения ищет DLL, чтобы вы могли лучше понять, почему она терпит неудачу.
Существует хорошая статья о Fusion-loggning от Scott Hanselman, как вы ее активируете и т.д., а затем просто запускайте fuslogw как администратор из командной строки.
Обновление
Журнал слияния показывает нам, где среда выполнения ищет ваши библиотеки DLL, в этом случае Budget.Data, которые она ищет в:
bin/Release/Budget.Data.DLL
bin/Release/Budget.Data/Budget.Data.DLL
bin/Release/Budget.Data.EXE
bin/Release/Budget.Data/Budget.Data.EXE
Вы можете проверить, действительно ли DLL находится в одном из этих каталогов? Если проверить целевую структуру вашей DLL (проверьте свойства проекта)? Является ли целевая структура совместимой с EF 5.0? Какова целевая структура ваших других сборок (если есть)
Ответ 2
Вы уверены, что путь правильный? Попробуйте удалить ссылку "Entity Framework" и повторно добавить ее вручную.
Щелкните правой кнопкой мыши, чтобы добавить ссылку, затем просмотрите здесь и добавьте dll:
C:\PATH\К\Solution\пакеты\EntityFramework.5.0.0-гс\Lib\net45\EntityFramework.dll
Также убедитесь, что путь указан в файле csproj проекта (щелкните правой кнопкой мыши проект, выгрузите, щелкните правой кнопкой мыши еще раз, а затем "Редактировать имя_проекта" ), вы должны иметь что-то вроде этого:
<Reference Include="EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\EntityFramework.5.0.0-rc\lib\net45\EntityFramework.dll</HintPath>
</Reference>
Другие вещи, которые нужно проверить, - это файл packages.config, чтобы убедиться, что он указан там, а также убедитесь, что для свойства Entity Framework свойство "Копировать локальное" установлено значение true. Возможно, вам также понадобится ссылаться на сборку в файле web.config, если вы используете ее в projcet ASP.NET или что-то подобное.
Ответ 3
- Установите флажок "скопировать локальный"
- Проверьте, что сборка dll существует в папке с открытым исходным кодом
- Проверьте ссылку в решении. Попробуйте ссылку readd.
- Проверьте версию и открытый ключ сборки и файл решения (вы можете открыть файл решения visual studio и отредактировать его в текстовом редакторе. Попробуйте удалить открытый ключ из файла решения и установить правильную версию, если он отличается)
- Также эта проблема может возникнуть, когда некоторая сборка, которую вы добавляете к ссылкам на ссылки на сборку, которые у вас не были. Если это попытается получить правильную сборку или попробуйте перестроить сборку с имеющимися у вас библиотеками.
Удачи!
Ответ 4
У меня на самом деле была эта проблема на днях при работе с контролем версий (git) и пакетом Nuget для ef5-rc. Что я решил решить, так это удалить (удалить в проводнике Windows) сборку из папки "пакеты" решений. Когда я перезапустил Visual Studio Nuget, я дал возможность восстановить пакеты. Надеюсь, это поможет!
Ответ 5
Какие блоки вы используете из EntLib5? Поскольку вы вызываете его из DAL, я предполагаю, что вы вызываете Microsoft.Practice.EnterpriseLibrary.Data.
Если это так, я просто хочу указать, что мне всегда нужны все следующие DLL, чтобы заставить EntLib5 DAAB работать для меня.
Microsoft.Practices.EnterpriseLibrary.Common
Microsoft.Practices.EnterpriseLibrary.Data
Microsoft.Practices.Unity
Microsoft.Practices.Unity.Interception
Отсутствие какой-либо из этих ссылок приведет к ошибке моего проекта во время выполнения, даже если компиляция будет прекрасной.
Я также попробовал запустить установщик EntLib5 из http://www.microsoft.com/en-us/download/details.aspx?id=15104, поскольку он прикрепляет библиотеки DLL к GAC.
Ответ 6
В итоге я решил это для проекта, над которым я работаю. В итоге я удалил все в папке .bin для проекта, который выдавал ошибку. Я предполагаю, что эти файлы переписываются только в определенное время или когда DLL файл изменяется и т.д. И не обрабатывается миграцией. Удаление этих файлов, очистка решения и перестройка, казалось, решили проблему для меня.
Ответ 7
Я тоже получаю эту проблему. Поэтому я немного осмотрелся и нашел следующее.
В разделе "Общие проблемы" http://msdn.microsoft.com/en-us/data/jj618307.aspx говорится...
"Обычно это означает, что вы используете приложение .NET 4 без файла Redirect.config. Вам нужно скопировать Redirect.config в то же место, что и migrate.exe, и переименовать его в файл migrate.exe.config."
К сожалению, я не знаю, где находится Redirect.config
. Невозможно найти его где-либо в содержимом каталога пакета NuGet.