2012-04-04 61 views
2

Assembly.GetTypes()は、ロードできない型がある場合にReflectionTypeLoadExceptionをスローします。Assembly.GetTypes() - 読み込みに失敗する型を取得します。

例外には正常にロードされた型をリストするTypes []プロパティと、ロードに失敗した型の例外をリストするLoaderExceptions []プロパティがあります。

私の質問:LoaderExceptionsに対応するタイプ自体を取得するにはどうすればよいですか?

編集:実際には、読み込みに失敗したという名前のを探しています。混乱して申し訳ありません。

+0

LoaderExceptionsを解決する必要があります。彼らは何ですか? –

+0

あなたはこれを見ましたか?http://stackoverflow.com/questions/2658275/c-sharp-assembly-gettypes-reflectiontypeloadexception - これは奇妙なエラーであるように見えますが、正確に何をしているのか、アセンブリがどこから来ているのか、それはあなたまたは第三者などです。リフレクターなどを試しましたか? – NSGaga

+0

この場合、LoaderExceptionsはFileLoadExceptionsであり、アクセス権のないエンドユーザーのマシンでのみ発生します。 FileLoadExceptionは、サードパーティのDLLにあります。私は文字通りプロダクションビルドを実行して、このユーザーにそれを実行させ、さらにログを取得してデバッグできるようにしなければなりません。これは、この多くの情報を得るためにこれの3ラウンドされています。 –

答えて

4

これはまったく不可能です。 CLRはTypeオブジェクトを作成できませんでした。その理由は、LoaderExceptionsのセットを取得したためです。ロードに失敗したTypeを記述するには、単にTypeオブジェクトがありません。

+0

十分に、私はそれを "読み込みに失敗した型の型名をどうやって得るのですか"と言いました。この場合、LoaderExceptionsには関連する融合ログを持つFileLoadExceptionsがありますが、実際には "Peters.BrokenClass"というタイプはこの例外のためロードできませんでした:..そのアセンブリSomething.From.MS.dllが読み込まれませんでした... –

+0

@PeterDrier使用するには不都合な例外です。私は通常、fuslogvwを使用してエラーを追跡しています。これはときどき参考になります。http://msdn.microsoft.com/en-us/library/e74a18c4(v=VS.71).aspx – JaredPar

+0

問題が発生したマシンに私がアクセスしただけであれば。それは現場にあり、ユーザーは私たちのより幸せな人ではありません。実際の唯一の選択肢は、余分なデバッグをコーディングし、問題を把握するのに十分な結果をサーバに返すことです。 –

0

このエラーは、場所からロードしているDllがアプリケーションまたは親アプリケーションで既に参照されている場合に発生します。 DLLがすでに参照されている場合は、アプリケーションのAssembliesをループします。

foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
     if (asm.ManifestModule.FullyQualifiedName.EndsWith("YourDllName.dll")) 
     { 
      foreach (var Type in asm.GetTypes()) 
      { 
        // Apply your logic here 
      }     
      break; 
     } 
} 
関連する問題