2012-11-27 13 views
6

Ho un progetto di app C# della console che dipende da NHibernate 3.3.2 e ShapArch.NHibernate 2.0.4.628 che è stato compilato con NHibernate 3.3.1 (per quanto ne so - potrei sbagliarmi, ma quando ho creato un progetto SharpArch 2.0.4 ho scaricato NH 3.3.1 via Nuget).versioni dll visualizzate in Visual Studio. Net che non riflette il file dll referenziato/versioni del prodotto

Perché Visual Studio mostra NHibernate come versione 3.3.1.4000 quando la dll di riferimento è 3.3.2.4000? La proprietà Versione specifica è impostata su false per tutti i riferimenti. E la versione per SharpArch appare in VS 2.0.0.0 anziché 2.0.4 che è la versione del file/prodotto.

Nel config app che ho:

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

L'applicazione non riesce a caricare con:

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 

io non sono nemmeno sicuro perché si sta cercando di caricare 3.3.0.4000 in cui l'architettura è stata tagliente compilato con 3.3.1.

risposta

11

NHibernate 3.3.2.GA ha un file di versione 3.3.2.4000 ma la assemblaggio versione è ancora 3.3.1.4000. Questo è stato fatto per consentire un aggiornamento di NHibernate senza bisogno di reindirizzamenti vincolanti. Anche tutti gli aggiornamenti futuri della versione minore di NHibernate seguiranno questo schema.

Quindi la soluzione per voi è solo per rimuovere il reindirizzamento vincolante.

La parte confusa qui è che Windows Explorer mostra solo le versioni di file e prodotto ma Visual Studio mostra solo la versione di assemblaggio.

+3

Un desiderio qualcuno potrebbe creare un'estensione VS per mostrare la versione del file nell'elenco delle proprietà. –

+0

Per ora userò sempre il reflector .net che mi mostra sempre la versione e le versioni delle DLL che la dll dipende – costa