Nasıl Montaj.çağırırken ReflectionTypeLoadException önlemek için()GetTypes
Türleri özel arayüzü bir kullanarak buna benzer bir kod uygulamak için bir derleme tarama için çalışıyorum:
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;
}
Benim sorunum bazı durumlarda asm.GetTypes()
montaj türleri mevcut olmayan bir derleme başvuru içeriyorsa, örneğin çağrılırken ReflectionTypeLoadException
olsun.
Benim durumumda, bu soruna neden olan türleri ilgilenmiyorum. Aradığım türde olmayan kullanılabilir derlemeler gerekmez.
Soru: bir şekilde/özel duruma neden olan türleri göz ardı ama hala diğer türleri derleme içinde bulunan süreci atlamak mümkün mü?
CEVAP
Oldukça kötü bir yol olacaktır:
Type[] types;
try
{
types = asm.GetTypes();
}
catch (ReflectionTypeLoadException e)
{
types = e.Types;
}
foreach (var t in types.Where(t => t != null))
{
...
}
Kesinlikle sinir bozucu olsa da bunu yapmak zorunda. Bir uzantı yöntemi olarak daha güzel yapmak için kullanabilirsiniz "müşteri" kod:
public static IEnumerable<Type> GetLoadableTypes(this Assembly assembly)
{
// TODO: Argument validation
try
{
return assembly.GetTypes();
}
catch (ReflectionTypeLoadException e)
{
return e.Types.Where(t => t != null);
}
}
İyi catch bloğu return
deyimi hareket için isteyebilirsiniz - çok istekli kendime, ama orada olmak büyük olasılıkla değilimkısa kod...
Nasıl JSP dosyaları Java kod önlemek i...
Nasıl MUAYENE dosyası tersine mühendis...
Nasıl bir düğmeye tıklandığında bir il...
Nasıl form gönderme düğmeleri önlemek ...
&; Zincirleri " eğer önlemek için nası...