Не удалось загрузить файл или сборку "Microsoft.Practices.Unity"
Я пытаюсь обновить Unity
до версии (2.1.505.2), но когда я запускаю приложение, я получаю следующее FileLoadException
Не удалось загрузить файл или сборку "Microsoft.Practices.Unity, Версия = 2.0.414.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 ' или одной из его зависимостей.
Мы обновляемся с Unity 2.0.414.0 до 2.1.505.2.
- Все ссылки на проекты в решении, которые ссылаются на Unity, относятся к правильной версии dll
- В Gac нет ссылки dll Unity. (дважды проверяется путем проверки
gacutil -l
)
-
Я удалил все DLL файлы Unity из архива. Двойная проверка с помощью powershell
PS C:\> ls -rec -inc Microsoft.Practices.Unity.dll | foreach-object { "{0}`t{1}" -f $_.FullName, [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion }
Как я могу узнать, что/кто еще ссылается на Unity 2.0.414.0?
FusionLogVw не говорит мне, какая DLL вызывает проблему.
Любая помощь очень ценится!
Ответы
Ответ 1
Проблема была другая dll Microsoft, которая ссылается на старую версию единства. Я обнаружил, что это случайно, проверяя пространства имен каждой ссылочной DLL и обнаружил другую dll, которая содержала пространства имен с "единством".
Обновление:
- Microsoft.Practices.EnterpriseLibrary.Common
- Microsoft.Practices.EnterpriseLibrary.Validation
к последним выпущенным версиям разрешена проблема.
Надеюсь, я сохраню день для какой-то потерянной души, которая также вытаскивает волосы над этой проблемой...:)
Ответ 2
Вы должны добавить перенаправление к соответствующей сборке:
Но ПРИМЕЧАНИЕ, что версия 2.1.505.0 должна использоваться при перенаправлении!
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" />
</dependentAssembly>
</assemblyBinding>
Вы не можете установить 2.1.505.2 из-за следующей причины:
![enter image description here]()
Unity assembly 2.1.505.2 содержит разные версии для AssemblyFileVersion и AssemblyVersion.
CLR не заботится о AssemblyFileVersion, поэтому используется только AssemblyVersion!
А AssemblyFileVersion используется только nuget!
Ответ 3
Проверьте свой файл app.config/web.config и, конечно же, ваши ссылки на проект.
Ответ 4
Поскольку ваш новый вопрос заключается в поиске существующих зависимостей сборки, вы можете обратиться к этому вопросу:
Как узнать, что зависит от конкретной версии конкретной зависимости?
Это относится к использованию Fuslogvw.exe
Ответ 5
Если у вас есть resharper, вы можете удалить ссылку на проблему, построить, перейти к классу, где он используется (есть ошибка) и получить resharper, чтобы исправить его для вас.
Сохраняет faffing around, но я ценю, что не у всех есть resharper: D