次のようなコードを使用して、特定のインターフェイスを実装する型のアセンブリをスキャンしようとしています。
public List<Type> FindTypesImplementing<T>(string assemblyPath)
{
var matchingTypes = new List<Type>();
var asm = Assembly.LoadFrom(assemblyPath);
foreach (var t in asm.GetTypes())
{
if (typeof(T).IsAssignableFrom(t))
matchingTypes.Add(t);
}
return matchingTypes;
}
私の問題は、たとえば、現在利用できないアセンブリを参照する型がアセンブリに含まれている場合など、場合によってはをReflectionTypeLoadException
呼び出すときにが発生するasm.GetTypes()
ことです。
私の場合、問題を引き起こすタイプには興味がありません。私が探している型には、利用できないアセンブリは必要ありません。
問題は、例外を引き起こすタイプを何らかの方法でスキップ/無視することは可能ですか?それでもアセンブリに含まれる他のタイプを処理することは可能ですか?
AppDomain.CurrentDomain.GetAssemblies()
、これは私のマシンでは機能しますが、他のマシンでは機能しません。どうして私の実行可能ファイルの一部のアセンブリがとにかく読み取り/ロードできないのですか?