【问题标题】:After updating the NHibernate I get the LoaderExceptions error?更新 NHibernate 后出现 LoaderExceptions 错误?
【发布时间】:2013-04-28 15:58:10
【问题描述】:

我有一个网站在将它放在 host-gator 上后在本地运行良好,它给出了错误 http://www.akbarca.com/。 Hostgator 支持团队说您的应用程序在完全信任级别下运行,在这种情况下,我们只允许中等信任级别。

经过调查,我发现问题出在以完全信任级别运行的 Nhibenate 2.00 中。搜索互联网我发现解决方案是将 Nhibernate 升级到最新版本,或者安装 NHibernate.DependencyInjection,在我安装两者之后,现在我在本地计算机中收到错误:

无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。

到目前为止,我已经尝试了以下但没有成功: 删除所有 DLL 并重新导入它们。 有 Copy local true to all。

当我有 [assembly: AllowPartiallyTrustedCallers()] 时,我也会遇到同样的错误。

我认为我必须让所有 DLL 以中等信任级别运行,如果可以,请您告知如何实施?

【问题讨论】:

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


    【解决方案1】:

    当我们从 DLL 中引用一个类型时,我们遇到了同样的异常,该类型没有被复制到项目的 bin 目录中,即使它已将本地复制设置为 true。丢失的 dll 不容易找到,因为在找到罪魁祸首之前,我们必须深入研究异常的内部异常及其堆栈跟踪。我们最初的调查指出了信任级别问题,但最终这是一条死胡同。更深入地研究内部异常(我遍历异常直到 innerException 为空)应该可以深入了解哪些 dll 加载失败。在我们的例子中,我们的项目所依赖的项目引用了“Microsoft.SqlServer.Types”,并且正在使用该 dll 中的 HierarchyId。

    【讨论】:

    • 我已经手动添加和删除了数千次 Dll,并且通过将本地副本设置为 true 仍然没有运气。
    【解决方案2】:

    我遇到过几次这种情况,通常是缺少依赖项,总是非常令人沮丧。

    在 Fluent 初始化期间抛出异常的事实有时会使异常有点误导,因为它根本不是真正的 FNH 异常。而ReflectionTypeLoadException 还将异常作为数组保存在LoaderExceptions 属性中这一事实也使得挖掘工作量更大。

    注意确保各个项目的引用保持一致。例如,当我让 R# 为我添加一个项目的依赖项时,我遇到了这个问题,该项目已经使用 Nuget 映射到另一个项目中。第二个项目获得了一个在本地很好但在服务器上无效的引用(并且没有使用 Nuget 解决),这使得在本地重现变得更加困难。

    无论如何,这里有一个代码 sn-p 可以帮助您找到罪魁祸首。此示例来自使用 Global.asax 的 MVC 应用程序,但可以轻松适应其他项目类型。

    protected void Application_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        if (null == ex || ex is ThreadAbortException)
        {
            // could be due to redirect
            return;
        }
        if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 404)
        {
            // don't want to log this
            return;
        }
    
        LogException(ex);
    }
    
    private void LogException(Exception exception)
    {
        if (exception is ReflectionTypeLoadException)
        {
            foreach (Exception loaderException in ((ReflectionTypeLoadException)exception).LoaderExceptions)
            {
                LogException(loaderException);
            }
            if (null != exception.InnerException)
            {
                LogException(exception);
            }
        }
        else if (null != exception.InnerException)
        {
            LogException(exception.InnerException);
        }
    
        // you might also choose System.Console.WriteLine(...), System.Diagnostics.Trace.WriteLine(...), etc.
        System.Diagnostics.Debug.WriteLine(exception.Message);
    
        // or send to your favorite logger...this is log4net
        Log.FatalFormat("Unhandled error in the website: {0}", exception);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 2019-09-30
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多