0

ホストゲーターに配置した後、ローカルで正常に機能するウェブサイトがあり、エラーhttp://www.akbarca.com/が発生しています。Hostgator サポート チームは、アプリケーションが完全な信頼レベルで実行されていると言います。この場合、中程度の信頼レベルのみを許可します。

調査の結果、完全な信頼レベルで実行される Nhibenate 2.00 に問題があることがわかりました。インターネットを検索すると、Nhibernate を最新のものにアップグレードするか、代わりに NHibernate.DependencyInjection をインストールすることが解決策であることがわかりました。両方をインストールした後、ローカル コンピューターでエラーが発生します。

要求されたタイプの 1 つ以上を読み込めません。詳細については、プロパティを取得し LoaderExceptionsてください。

これまでのところ、次のことを試しましたが成功しませんでした:すべてのDLLを削除して再インポートしました。Copy local をすべてに当てはめます。

また[assembly: AllowPartiallyTrustedCallers()]、同じエラーが発生しています。

すべての DLL を中程度の信頼レベルで実行する必要があると思います。そうであれば、同じ実装方法についてアドバイスしていただけますか?

4

2 に答える 2

0

私はこれに数回遭遇しましたが、通常は依存関係が欠落しており、常に非常にイライラしています。

Fluent の初期化中に例外がスローされるという事実は、例外が実際には FNH 例外ではないため、誤解を招くことがあります。ReflectionTypeLoadExceptionまた、例外をプロパティの配列として保持するという事実もLoaderExceptions、もう少し作業を掘り下げます。

個々のプロジェクト間で参照が一貫していることを確認してください。たとえば、Nuget を使用して別のプロジェクトで既にマップされているプロジェクトに R# で依存関係を追加すると、これに遭遇しました。2 番目のプロジェクトは、ローカルでは適切な参照を取得しましたが、サーバーでは無効であり (Nuget を使用して解決されませんでした)、ローカルでの再現がはるかに困難になりました。

いずれにせよ、犯人を突き止めるのに役立つかもしれないコード スニペットを次に示します。この例は、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);
}
于 2013-09-17T03:03:20.187 に答える