Could not load file or assembly 'Microsoft.Pra

2019-03-24 15:15发布

I am trying to upgrade Unity to version (2.1.505.2), but when I run the application I get the following FileLoadException

Could not load file or assembly 'Microsoft.Practices.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.

We are upgrading from Unity 2.0.414.0 to 2.1.505.2.

  • All project references in the solution that refer to Unity refer to the correct version of the dll
  • There is no Unity dll referenced in the Gac. (double checked by checking gacutil -l)
  • I removed all Unity dlls from the archive. Double checked with powershell

    PS C:\> ls -rec -inc Microsoft.Practices.Unity.dll | foreach-object { "{0}`t{1}" -f $_.FullName, [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion }
    

How can I find out what / who still refers to the Unity 2.0.414.0?

FusionLogVw doesn't tell me which DLL is causing the problem.

Any help is much appreciated!

7条回答
我想做一个坏孩纸
2楼-- · 2019-03-24 15:28

You should add redirect to proper assembly:

But NOTE that version 2.1.505.0 should be used in redirect!

<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>

You cannot set 2.1.505.2 because of next reason:

enter image description here

Unity assembly 2.1.505.2 contains different versions for AssemblyFileVersion and AssemblyVersion.

CLR does not care about AssemblyFileVersion so only AssemblyVersion is used! And AssemblyFileVersion is used only by nuget!

查看更多
放我归山
3楼-- · 2019-03-24 15:28

I wasn't able to correct it by using the EnterpriseLibrary update in the accepted solution. I ended up just overriding the dependent assembly version in the app.config, you could do something similar to force any library that complains about the version to use another version.

App.config:

  <dependentAssembly>
    <assemblyIdentity name="Unity.Container" publicKeyToken="489B6ACCFAF20EF0" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-5.8.11.0" newVersion="5.8.11.0"/>
  </dependentAssembly>
查看更多
等我变得足够好
4楼-- · 2019-03-24 15:36

Check your app.config/web.config and of course your project references.

查看更多
看我几分像从前
5楼-- · 2019-03-24 15:39

Since your new question is about finding existing dependencies on an assembly, you might refer to this question:

How to find what depends on a specific version of a specific dependency?

Which refers to using Fuslogvw.exe

查看更多
萌系小妹纸
6楼-- · 2019-03-24 15:51

If you have resharper, you can remove the problem reference, build, goto the class where it is used(there is an error) and get resharper to fix it for you.

Saves faffing around, but I appreciate not everyone has resharper :D

查看更多
淡お忘
7楼-- · 2019-03-24 15:52

Overview: this was someone's code I had to fix a bug in code, so they provided me a zip file of application.

I had no Idea what was happening and why always for the first time my code was running and after restart the application (post any changes) it start throwing Exception. there are many possible solution provided in the forums and i was blaming my code & database and then started undo each step i did. But that doesn't help

Solution: As multiple troubleshoot can't fix this but when I restarted investigate each n every thing from beaning to find the actual reason which is causing the exception, I found is

For every new build, my application's bin folder deleting the dlls

then the solution is to paste these dlls into applications bin folder and rebuild the code (refer screenshot)

result: all sh*t gone.

enter image description here

查看更多
登录 后发表回答