来自HRESULT的异常:0x80131040与NHibernate,Antlr和Antlr3

时间:2017-03-08 21:00:45

标签: c# .net asp.net-mvc nhibernate

  1. 我有NHibernate 2.1.2.4000,需要Antlr 3.1.1

  2. 我通过使用需要Antlr的WebGrase进行缩小捆绑来提高Web应用程序的性能(> = 3.4.1.9004)性能提高了约38.8%。想要了解详情,请查看以下链接:https://docs.microsoft.com/en-us/aspnet/mvc/overview/performance/bundling-and-minification y https://docs.microsoft.com/en-us/aspnet/core/client-side/bundling-and-minification

  3. 我同时拥有ANtlr Dlls。

  4. 当我转到使用NHibernate的控制器时,我得到一个例外:

  5.   

    发生了'System.IO.FileLoadException'类型的异常   NHibernate.dll但未在用户代码中处理

         

    其他信息:无法加载文件或程序集   'Antlr3.Runtime,版本= 3.1.0.39271,文化=中立,   PublicKeyToken = 3a9cab8f8d22bfb7'或其依赖项之一。该   找到程序集的清单定义与程序集不匹配   参考。 (HRESULT异常:0x80131040)

    这个错误出现了,因为它引用了新的ANTLR库,我需要的是在时间旅行并使用旧库。

    1. 我尝试过:绑定web.config内的重定向,直到现在都没有成功。
    2. 信息:

       <Reference Include="antlr.runtime, Version=2.7.7.3, Culture=neutral, PublicKeyToken=d7701e059243744f">
            <SpecificVersion>False</SpecificVersion>
            <HintPath>..\Dependencies\Antlr.3.1.1\lib\antlr.runtime.dll</HintPath>
      </Reference>
      <Reference Include="Antlr3.Runtime, Version=3.4.1.9004, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL">
            <HintPath>..\packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll</HintPath>
            <Private>True</Private>
      </Reference>
      <Reference Include="Antlr3.Utility, Version=0.1.0.39272, Culture=neutral, PublicKeyToken=3a9cab8f8d22bfb7, processorArchitecture=MSIL">
            <SpecificVersion>False</SpecificVersion>
            <HintPath>..\Dependencies\Antlr.3.1.1\lib\Antlr3.Utility.dll</HintPath>
      </Reference>
      <Reference Include="NHibernate, Version=2.1.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
            <SpecificVersion>False</SpecificVersion>
            <HintPath>..\Dependencies\NHibernate.dll</HintPath>
      </Reference>
      

      我正在尝试的一些绑定:

      使用NHibernate令牌

       <dependentAssembly>        
              <assemblyIdentity name="antlr.runtime" publicKeyToken="aa95f207798dfdb4" Culture="neutral" />
              <bindingRedirect oldVersion="3.1.0.39271" newVersion="3.4.1.9004" />
      </dependentAssembly>
      
      <dependentAssembly>        
              <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" Culture="neutral" />
              <bindingRedirect oldVersion="3.1.0.39271" newVersion="3.4.1.9004" />
      </dependentAssembly>
      

      使用Antlr令牌(并在当时旅行)

      <dependentAssembly>        
              <assemblyIdentity name="NHibernate" publicKeyToken="d7701e059243744f" Culture="neutral" />
              <bindingRedirect oldVersion="3.4.1.9004" newVersion="3.1.1.0" />
      </dependentAssembly>
      

      我会继续寻找解决方案。

2 个答案:

答案 0 :(得分:1)

我得到了同样的错误。我知道正确的答案已经存在,但也许它会对某人有所帮助。安装FluentNHibernate然后安装NHibernate 5.0.0时发生此错误。我得到了第一个NHibernate 4.0.0.4000和第二个FluentNHibernate。解决方案是首先删除NHibernateFluentNHibernate,然后仅通过NuGet重新安装Antlr3.Runtime。我不确定是否应删除dependentAssembly,但我手动删除了它。

我还从web.config删除了 <dependentAssembly> <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> ,因为我有一个分层应用程序。

{{1}}

之后一切正常。

答案 1 :(得分:0)

确定!我做的!尝试编辑项目文件(.csproj):

 <Reference Include="Antlr3.Runtime, Version=3.4.1.9004, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL">
      <HintPath>..\packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll</HintPath>
      <Private>True</Private>
</Reference>

在安装WebGrease和优化之前,就像这样:

 <Reference Include="Antlr3.Runtime">
      <HintPath>..\Dependencies\Antlr.3.1.1\lib\Antlr3.Runtime.dll</HintPath>
 </Reference>

所以,我走到了过去。我修改了文件 .csproj ,然后我恢复了它#34;。仅编辑该库而不指定版本,文化,PublicKeyToken和processorArchitecture。

WebGrease和所有优化都已启动并正常运行。