无法在NHibernate中加载文件或程序集

Gar*_*nay 15 c# asp.net nhibernate

我最近在hibernate.cfg.xml文件中遇到了一些问题,因为我没有使用以下行.

<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
Run Code Online (Sandbox Code Playgroud)

现在,这是固定的,我得到以下错误.

无法加载文件或程序集'NHibernate,Version = 2.1.0.4000,Culture = neutral,PublicKeyToken = aa95f207798dfdb4'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

为什么我会收到此错误以及如何解决?

jos*_*mrb 14

这些文件应与引用的文件NHibernate.dll位于同一目录中:

  • Antlr3.Runtime.dll
  • Iesi.Collections.dll
  • log4net.dll
  • Castle.Core.dll
  • Castle.DynamicProxy2.dll

你也应该添加一个引用或复制这个引用:

  • NHibernate.ByteCode.Castle.dll


Mar*_*ner 6

作为未来的参考:如果您遇到Randy Klingelheber指出的相同问题(NHibernate和FluentNHibernate之间的依赖性问题,或任何其他依赖库),您可以为针对旧版本的程序集指定重定向.这可以防止必须重新编译依赖程序集.

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" />
      <bindingRedirect oldVersion="3.0.0.3001" newVersion="3.0.0.4000" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)

此代码将旧版本(在我的情况下为3.0.0.3001)的请求重定向到实际使用的版本(3.0.0.4000).publicKeyToken包含在错误消息中.


Cub*_*anX 5

我假设你最近将NHibernate升级到2.1?

如果是这样,我猜你有不同的项目引用不同版本的NHibernate.

这发生在我身上,比你想象的更难追查.

这些是我为解决它而采取的步骤:

  1. 删除项目中所有bin目录中的所有文件.通常,Clean Solution适用于此,但事实并非如此,您可能需要通过命令行调用或手动执行此操作
  2. 编辑所有.csproj文件.使用文本编辑器编辑它们或执行卸载项目然后编辑.csproj文件.
  3. 确保所有HintPath节点都指向DLL的相同(新)版本

希望能为您解决这个问题.