추상, 기본 클래스를 노출하는 .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에서이 동일한 코드를 호출하면 반사 오류가 발생하고 위 코드가 포함 된 어셈블리를로드 할 수 없다는 로더 정보가보고됩니다. 이 기본 클래스를 상속하는 클래스가 들어 어셈블리를 통해 반영 오전 GetTypes()
호출 GetLoadableTypes
루틴을 경우에만 발생합니다.
COM이 관련되었을 때만 발생하는 재진입 문제와 거의 같은 것처럼 들립니다. 나는 추상적 인 기본 클래스를 다른 어셈블리에 넣을 수는 있었지만, 계속 진행되고있는 다른 것이 있는지 궁금해했다.
어떤 설명이나 포인터가 분명히 감사
을받은오류 메시지 :
ReflectionTypeLoadException ".. 하나 또는 요청 유형의 더로드 더 내용은 LoaderExceptions 속성을 검색 할 수 없습니다"
과은 LoaderExceptions에
: 또는 해당 종속성 중 하나는 "파일 또는 어셈블리를로드 할 수 없습니다 ', PublicKeyToken = null이 IfxGenDocService, 버전 = 1.0.0.0, 문화 = 중립'을 . 지정한 파일을 찾을 수 없습니다. ":"IfxGenDocService, 버전 = 1.0.0.0, 문화 = 중립, PublicKeyToken = null이 "
EDIT1을 : 나는 자신의 엉덩이에 기본 클래스를 추출하기 위해 약간의 주위에 물건을 변경 엠블럼과 여전히 같은 오류가 발생하고 있습니다. 아마 관련이있다, 나는 기본 클래스를 상속하는 3 개의 클래스를 포함하는 atest 어셈블리를 가지고있다. 나는 위의보고 3은 LoaderExceptions이 (같은. 나는 각 클래스 1을 가정 모두 얻을.
전체 오류 메시지를 추가 할 수 있습니까? – thehennyy
Thx .. 방금 추가했습니다. –