LoaderExceptionプロパティを取得する方法は?


128

サービス参照の更新中にエラーメッセージが表示されます。

カスタムツールの警告:要求された1つ以上のタイプをロードできません。詳細については、LoaderExceptionsプロパティを取得してください。

LoaderExceptionプロパティを取得するにはどうすればよいですか?

更新:ドメインオブジェクトプロジェクトを再インポートすると、エラーがなくなりました。これで問題が解決した理由はわかりませんが、問題なく機能していると思います。


6
どのようにしてこれを修正しましたか?「ドメインオブジェクトプロジェクトの再インポート」とはどういう意味ですか?(プロジェクトの削除を参照して、もう一度それを再度追加?)
ニコスTsokos

回答:


142
try
{
  // load the assembly or type
}
catch (Exception ex)
{
  if (ex is System.Reflection.ReflectionTypeLoadException)
  {
    var typeLoadException = ex as ReflectionTypeLoadException;
    var loaderExceptions  = typeLoadException.LoaderExceptions;
  }
}

1
この警告/エラーが発生した他の人にとって最も役立つと思うので、私はあなたを回答としてマークしました。
rozon

3
このソリューションを使用しようとしていますが、WCFサービスに実際にtryブロックをラップするエントリポイントがありません。
ジョーダン

3
この答えは、私のコードと何か関係がある場合に役立ちます。クラスtry...catch全体を配置しましたがInstaller.cs、何もしませんでした!私のコードは、実行時にこれをスローしません。インストーラーを実行しようとしたときだけです。詳細については、LoaderExceptionsプロパティを取得する方法を知っている人はいますか?たとえば、フォルダを参照してログファイルを表示しますか?
jp2code 2013年

5
catch句はすべての例外をキャッチしますが、ReflectionTypeLoadExceptionsのみを処理します。このようなものが良いでしょう。catch (ReflectionTypeLoadException ex) { var typeLoadException = ex as ReflectionTypeLoadException; var loaderExceptions = typeLoadException.LoaderExceptions; }
Scott Munro 2013年

1
@ScottMunro:それを1つの型としてキャッチしている場合、なぜ同じ型の別の変数を作成してキャストするのですか?これで十分ですcatch (ReflectionTypeLoadException ex) { var loaderExceptions = ex.LoaderExceptions; }。また、あなたはキャストが失敗することを期待し、nullをチェックする場合を除き、それはそれがnull参照の例外を除いて、後にすぐに失敗しないように直接的なキャストを行う方が良いでしょう:var typeLoadException = (ReflectionTypeLoadException)ex;
ネルソンRothermel

74
catch (ReflectionTypeLoadException ex)
{        
    foreach (var item in ex.LoaderExceptions)
    {
          MessageBox.Show(item.Message);                    
    }
}

古いスレッドを復活させて申し訳ありませんが、他の誰かがこれに遭遇するために、ローダーの例外(実際のReflectionTypeLoadExceptionを使用)をプルする別のソリューションを投稿したいと思いました。


2
参考までに、Win Serviceを実行している場合(私と同じように)、UI要素が自動的にブロックされるため、MessageBoxは表示されません。残りの実装は役に立ちました。代わりにログファイルに保存するだけです。ありがとう。
Vippy

1
「catchステートメントにステートメントブロックがありません」。神様、私はpowershellが嫌いです。
フクロウ

おかげで、このソリューションは正確な問題を正確に示しているため、正確です。例外をキャッチしても意味がありません。
ムハンマドアシャールハサン

5

Visual Studioのクイックウォッチを使用すると、次のように、スローされた例外のViewDetailsからLoaderExceptionsにアクセスできます。

($exception).LoaderExceptions

ありがとう!LoaderExceptions実際に関連情報が含まれているので、にアクセスせずにその情報を含めないのはなぜでしょうか。
GuiRitter

0

対話モードで、またはインタラクティブモードでプローブしている人のための別の代替方法:

$ Error [0] .Exception.LoaderExceptions

注:[0]はスタックから最新のエラーを取得します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.