2014-01-20 8 views
15

Ich versuche Unity auf Version (2.1.505.2) zu aktualisieren, aber wenn ich die Anwendung ich die bekommen laufen folgende FileLoadExceptionKonnte Datei oder Assembly ‚Microsoft.Practices.Unity‘ laden

konnte nicht geladen werden Datei oder Assembly 'Microsoft.Practices.Unity, Version = 2.0.414.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' oder eine seiner Abhängigkeiten.

Wir aktualisieren von Unity 2.0.414.0 auf 2.1.505.2.

  • Alle Projektreferenzen in der Lösung, die zur Einheit auf die korrekte Version der DLL
  • Es gibt keine Einheit DLL im GAC verwiesen beziehen beziehen. (doppelt überprüft durch Überprüfung gacutil -l)
  • Ich entfernte alle Unity-DLLs aus dem Archiv. Doppelt geprüft mit Power

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

Wie kann ich herausfinden, was/wer auf die Unity 2.0.414.0 bezieht sich noch?

FusionLogVw sagt mir nicht, welche DLL das Problem verursacht.

Jede Hilfe wird sehr geschätzt!

+0

Mögliche Duplikat [Konnte Datei oder Assembly oder eine ihrer Abhängigkeiten laden] (http://stackoverflow.com/questions/4469929/could -nicht-laden-Datei-oder-Assembly-oder-eine-seiner-Abhängigkeiten) – Matt

Antwort

11

Das Problem war eine andere Microsoft-DLL, die auf die alte Version der Einheit verweist. Ich habe herausgefunden, dass dies ein Zufall sein würde, indem ich die Namespaces jeder referenzierten DLL überprüfe und eine andere DLL finde, die Namespaces mit "Einheit" enthält.

Aktualisierung:

  • Microsoft.Practices.EnterpriseLibrary.Common
  • Microsoft.Practices.EnterpriseLibrary.Validation

neuesten veröffentlichten Versionen behoben das Problem.

Ich hoffe, dass ich den Tag für einige verlorene Seele zu retten gibt, die seine Haare ziehen auch ... über dieses Thema aus :)

0

Überprüfen Sie Ihre app.config/web.config und natürlich Ihre Projektreferenzen.

+0

getan, dass bereits gründlich. Ich bin überzeugt, dass sich nichts auf 2.0.414 bezieht. Etwas anderes zieht diese Abhängigkeit an, und die Laufzeit beschwert sich darüber, dass sie, wie in der Ausnahme erwähnt, einfach die nicht mehr existierende Version der Assembly nicht finden kann. – bas

1
bezieht sich

Sie sollten auf korrekte Montage hinzufügen Umleitung zu verwenden:

Aber HINWEIS, dass Version 2.1.505.0 in Redirect verwendet werden sollte!

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

Sie können nicht 2.1.505.2 wegen nächsten Grund gesetzt:

enter image description here

Unity Montage 2.1.505.2 verschiedene Versionen für Assembly und Assembly enthält.

CLR kümmert sich nicht um AssemblyFileVersion, daher wird nur AssemblyVersion verwendet! Und AssemblyFileVersion wird nur von nuget verwendet!

0

Wenn Sie resharper haben, können Sie die Problemreferenz entfernen, bauen, zu der Klasse, wo es verwendet wird (es gibt einen Fehler) und erhalten Sie nachschärfen, um es für Sie zu beheben.

Saves faffing herum, aber ich schätze nicht jeder hat resharper: D

Verwandte Themen