私はこれに数回遭遇しましたが、通常は依存関係が欠落しており、常に非常にイライラしています。
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);
}