6

NHibernate 3.3.2 および NHibernate 3.3.1 でコンパイルされた ShapArch.NHibernate 2.0.4.628 に依存するコンソール アプリ c# プロジェクトがあります (私の知る限り、間違っている可能性がありますが、2.0.4 を作成したときNuget 経由で NH 3.3.1 をダウンロードした SharpArch プロジェクト)。

参照されている dll が 3.3.2.4000 の場合、Visual Studio が NHibernate をバージョン 3.3.1.4000 として表示するのはなぜですか? 特定のバージョン プロパティは、すべての参照に対して false に設定されます。また、SharpArch のバージョンは、ファイル/製品バージョンである 2.0.4 ではなく、VS 2.0.0.0 に表示されます。

私が持っているアプリの設定で:

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

アプリの読み込みに失敗します:

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  

シャープ アーキテクチャが 3.3.1 でコンパイルされているのに、なぜ 3.3.0.4000 をロードしようとするのかさえわかりません。

4

1 に答える 1

11

NHibernate 3.3.2.GAのファイルバージョンは3.3.2.4000ですが、アセンブリバージョンはまだ3.3.1.4000です。これは、バインディングリダイレクトを必要とせずにNHibernateをアップグレードできるようにするために行われました。NHibernateの今後のマイナーバージョンのアップグレードもすべて、このパターンに従います。

したがって、解決策は、バインディングリダイレクトを削除することです。

ここで紛らわしいのは、Windowsエクスプローラーにはファイルと製品のバージョンのみが表示され、VisualStudioにはアセンブリのバージョンのみが表示されることです。

于 2012-11-27T06:56:29.540 に答える