Assembly.LoadとAssembly.ReflectionOnlyLoadの違いを理解しようとしています。
以下のコードでは、特定のインターフェイスから継承する特定のアセンブリ内のすべてのオブジェクトを検索しようとしています。
var myTypes = new List<Type>();
var assembly = Assembly.Load("MyProject.Components");
foreach (var type in assembly.GetTypes())
{
if (type.GetInterfaces().Contains(typeof(ISuperInterface)))
{
myTypes.Add(type);
}
}
このコードは私にとっては問題なく機能しますが、他のおそらくより良い代替案を調査していて、Assembly.ReflectionOnlyLoad()メソッドに出くわしました。
オブジェクトをロードまたは実行していないので、基本的には、ReflectionOnlyLoadを使用してパフォーマンスをわずかに向上させることができるという定義をクエリするだけだと思いました...
しかし、Assembly.LoadをAssembly.ReflectionOnlyLoadに変更すると、assembly.GetTypes()を呼び出すときに次のエラーが発生することがわかりました。
System.Reflection.ReflectionTypeLoadException:
要求されたタイプの1つ以上をロードできません。詳細については、LoaderExceptionsプロパティを取得してください。
上記のコードは、ライブラリを反映して「見る」だけだと思いました...しかし、これは、ライブラリとその中のオブジェクトを見ると、実際にライブラリをインスタンス化しようとするハイゼンベルグの不確定性原理の一種のインスタンスです。仕方?
ありがとう、マックス