Я пытаюсь использовать MEF в своем проекте, но в некоторых случаях я получаю эту ошибку:
System.Reflection.ReflectionTypeLoadException
Невозможно загрузить один или несколько запрошенных типов.Извлеките свойство LoaderExceptions для получения дополнительной информации.
Универсальный метод или метод в универсальном классе - это внутренний вызов, PInvoke или определен в классе импорта COM.
В исключении журнала он представляет собой универсальный класскоторые используют атрибут DllImport.
Разве невозможно вызвать методы pinvoke в универсальном классе?
Мне все еще интересно, почему это вызывает проблему.
исходный код:
void Compose()
{
try
{
DirectoryCatalog catalog =
new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory);
AggregateCatalog agcatalogue = new AggregateCatalog(new ComposablePartCatalog[] {catalog,
new AssemblyCatalog(Assembly.GetExecutingAssembly())});
CompositionContainer container = new CompositionContainer(agcatalogue);
CompositionBatch batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);
}
catch (FileNotFoundException fnfex)
{
Console.WriteLine(fnfex.Message);
}
catch (CompositionException cex)
{
Console.WriteLine(cex.Message);
}
catch (System.Reflection.ReflectionTypeLoadException rte)
{
Console.WriteLine(rte.Message);
foreach (Exception ex in rte.LoaderExceptions)
{
Console.WriteLine(ex.ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
//Generic Class
[Serializable]
public class ProcessCounters<T> : IDisposable where T : ICounterData
{
/// <summary>
/// Extern
/// </summary>
/// <param name="ticks"></param>
[DllImport("Kernel32.dll")]
public static extern void QueryPerformanceCounter(ref long ticks);
private static T _counterData;
...}
Обновление: Ограничение: Вы не можете иметь DllImports в универсальном классе.Поместите ваши DllImports в отдельный статический класс (как рекомендуется).Решение. Решите его, переместив класс NativeMethods за пределы универсального класса.
http://blog.appelgren.org/2006/05/04/nested-class-with-pinvoke-in-generic-class/
http://www.archivum.info/microsoft.public.dotnet.framework.clr/2006-12/00015/RE-TypeLoadException-when-instantiating-generic-class-that-uses-D.html