私は抽象クラスを公開する.Net4アセンブリを持っています。その同じアセンブリでは、フォルダ内のすべてのファイルにその基本クラスを継承するクラスのリストを作成するためのコードがあります。ここでは顕著なルーチンReflectionTypeLoadExceptionとCOM-Interop
private JsonTextWriter GetAvailableServices(JsonTextWriter writer, string path)
{
try
{
writer.WriteStartArray();
writer = new DirectoryInfo(path).GetFiles(FileFilter)
.Where(f => IsAssembly(f.FullName))
.Select(f => Assembly.LoadFile(Path.Combine(path, f.Name)))
.SelectMany(a => GetLoadableTypes(a))
.Where(p => typeof(ServiceProxy).IsAssignableFrom(p) && !p.IsAbstract)
.Select(a0 => new { Instance = Activator.CreateInstance(a0), ClassName = a0.ToString() })
.Aggregate(writer, (s, v) =>
{
s.WriteStartObject();
s.WritePropertyName(ClassnameLabel);
s.WriteValue(v.ClassName);
s.WritePropertyName(DescriptionLabel);
s.WriteValue(((ServiceProxy)v.Instance).Description);
s.WriteEndObject();
return s;
});
}
catch { Exception ex; }
finally
{
writer.WriteEndArray();
}
return writer;
}
private IEnumerable<Type> GetLoadableTypes(Assembly assembly)
{
try
{
return assembly.GetTypes();
}
catch (ReflectionTypeLoadException e)
{
return e.Types.Where(t => t != null);
}
}
は、私は特定のフォルダをターゲットに、このコードを実行するユニットテストを持っている、そしてそれがすべてJSONとして基本クラスを継承するクラスのリストを返す正常に動作します。
上記のコードは、COM(VB6)コンポーネントから呼び出されるアセンブリにあります。この同じコードをCOMから呼び出すと、単体テストと同じフォルダをターゲットにすると、リフレクションエラーが発生し、上記のコードが含まれているアセンブリをロードできないというローダー情報が報告されます。これは、基本クラスを継承するクラスを含むアセンブリを反映しているときに、呼び出しのGetLoadableTypes
ルーチンでのみ発生します。
COMが関与している場合にのみ発生する再突入問題のように聞こえます。私は抽象基本クラスを別のアセンブリに入れることができると思うが、何か他のことが起こっているのか疑問に思った。
任意の説明やポインタは明らかに感謝
エラーメッセージ受信:「。 要求された種類の一つ以上を読み込むことができませんより多くの についてはLoaderExceptionsプロパティを取得」
ReflectionTypeLoadExceptionを
とLoaderExceptionsで:
「 ' カルチャニュートラル、PublicKeyToken = = null、IfxGenDocService、バージョン= 1.0.0.0' またはその依存関係の1つのファイルまたはアセンブリをロードできませんでした 。システムは、指定されたファイルを見つけることができません。「:」IfxGenDocService、 バージョン= 1.0.0.0、文化=中立、なPublicKeyToken = null」の
EDIT1を:私は、自身のお尻に基本クラスを抽出するために、少し周りのものを変更しましたまだ同じエラーが発生しています。おそらく関連しているのは、ベースクラスを継承する3つのクラスを含むアセンブリを持っているということです。上記報告されたように、私は、クラスごとに1を前提としています。3 LoaderExceptions(すべて同じを得る。
完全なエラーメッセージを追加できますか? – thehennyy
Thx .. just added –