Я хочу вывести типы в файле .winmd с учетом его пути. Я скопировал файл winmd с моей машины для предварительного просмотра Windows 8 на мою машину dev. Я написал небольшое тестовое приложение (в C#, .NET 4.0, а не 4.5), которое пытается загрузить сборку во время выполнения, учитывая ее путь и выводит типы в нем. Хотя сборка была загружена, произошло исключение, когда я попытался получить типы.Невозможно получить типы из .winmd-файла
Вот код:
static void Main(string[] args)
{
if (args.Length != 1) return;
var path = args[0];
if (!System.IO.File.Exists(path))
{
Console.WriteLine("file not found : " + path);
return;
}
var asm = System.Reflection.Assembly.LoadFrom(path); // load successful.
Console.WriteLine("loaded ");
string name = asm.GetName().Name;
Console.WriteLine(name);
System.Type[] types = asm.GetTypes(); // exception occurs here
foreach(var type in types)
{
// output type name
}
}
Исключение типа ReflectionTypeLoadException. Свойством Message является: Невозможно загрузить один или несколько запрошенных типов. Получите свойство LoaderExceptions для получения дополнительной информации.
Свойство LoaderExceptions, содержащее основное исключение, исключение TypeLoadException. Свойство Message имеет следующее значение: Плохое использование атрибута Runtime Impl.
Никто не знает, почему я не могу читать типы?
Спасибо.
Примечание: Я знаю, что использую .NET 4.0. Но в .NET 4.5 (тот, который был в предварительном просмотре Windows 8) я не мог загрузить сборку из файла во время выполнения. В классе Assembly нет метода, который делает это.