2012-11-27 7 views
6

Ich habe eine Console-App C# -Projekt, das auf NHibernate 3.3.2 und ShapArch.NHibernate 2.0.4.628, die mit NHibernate 3.3.1 kompiliert wurde (Soweit ich weiß - ich könnte mich irren, aber als ich ein SharpArch-Projekt 2.0.4 erstellt habe, habe ich NH 3.3.1 über Nuget heruntergeladen).DLL-Versionen im Visual Studio angezeigt. Net nicht die referenzierte DLL-Datei/Produktversionen

Warum zeigt Visual Studio NHibernate als Version 3.3.1.4000, wenn die referenzierte DLL 3.3.2.4000 ist? Die Eigenschaft Spezifische Version wird für alle Verweise auf false gesetzt. Und die Version für SharpArch erscheint in VS 2.0.0.0 statt 2.0.4, die die Datei/Produkt-Version ist.

In der App Config ich habe:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.3.1.4000" newVersion="3.3.2.4000" /> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

Die App mit nicht geladen werden kann:

System.IO.FileLoadException was unhandled 
    Message=Could not load file or assembly 'NHibernate, Version=3.3.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 
    Source=MyApp.ResourcesGenerator 
    FileName=NHibernate, Version=3.3.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4 
    FusionLog="" 
    StackTrace: 
     at MyApp.ResourcesGenerator.Program.InitializeNHibernateSession() 
     at SharpArch.NHibernate.NHibernateInitializer.InitializeNHibernateOnce(Action initMethod) in d:\Builds\SharpArch2\Solutions\SharpArch.NHibernate\NHibernateInitializer.cs:line 54 
     at MyApp.ResourcesGenerator.Program.Initialize() in C:\projects\tc\Trunk\Source_LibsUpgrade\Applications\PerformanceManagement\MyApp.ResourcesGenerator\Program.cs:line 149 
     at MyApp.ResourcesGenerator.Program.Main(String[] args) in C:\projects\tc\Trunk\Source_LibsUpgrade\Applications\PerformanceManagement\MyApp.ResourcesGenerator\Program.cs:line 31 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: System.IO.FileLoadException 
     Message=Could not load file or assembly 'NHibernate, Version=3.3.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 
     FileName=NHibernate, Version=3.3.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4 

Ich bin nicht einmal sicher, warum es versucht 3.3.0.4000 zu laden, wenn scharfe Architektur gewesen kompiliert mit 3.3.1.

Antwort

11

NHibernate 3.3.2.GA hat eine Datei Version 3.3.2.4000 aber die Montage Version ist noch 3.3.1.4000. Dies wurde durchgeführt, um ein Upgrade von NHibernate ohne verbindliche Umleitungen zu ermöglichen. Alle zukünftigen Nebenversionen von NHibernate folgen ebenfalls diesem Muster.

Also die Lösung für Sie ist nur die Bindungsumleitung zu entfernen.

Der verwirrende Teil hier ist, dass der Windows Explorer nur die Datei- und Produktversionen zeigt, aber Visual Studio zeigt nur die Assembly-Version.

+3

Ein Wunsch jemand würde eine VS-Erweiterung erstellen, um die Dateiversion in der Liste der Eigenschaften anzuzeigen. –

+0

Für den Moment werde ich immer den .net Reflektor verwenden, der mir immer die Version sowie die Versionen der DLLs zeigt, von denen die DLL abhängt – costa

Verwandte Themen