2013-05-18 1 views
1

У меня есть строка, содержащая полное квалифицированное имя, например MyNamespace.MyType, которое, как я знаю, находится в загруженной сборке.Получить тип от Полностью квалифицированного имени только в приложении Windows Store

Мне нужно получить экземпляр Type этого приложения в приложении Windows.

Проблема, с которой я сталкиваюсь, заключается в том, что, хотя в приложениях для хранения окон есть некоторые классы отражения, она очень ограничена, и я просто не могу использовать то, что я использовал для настольного приложения.

Если я могу получить сборку, я могу найти свой тип внутри нее, поэтому в настоящее время я пытаюсь получить все загруженные сборки, чего я не могу сделать легко, так как AppDomain не существует.

я нашел следующее:

private async System.Threading.Tasks.Task<IEnumerable<Assembly>> GetAssembliesCore() 
{ 
    var folder = Windows.ApplicationModel.Package.Current.InstalledLocation; 

    List<Assembly> assemblies = new List<Assembly>(); 
    foreach (Windows.Storage.StorageFile file in 
       await folder.GetFilesAsync().AsTask().ConfigureAwait(false)) 
    { 
     if (file.FileType == ".dll") 
     { 
      AssemblyName name = new AssemblyName() { Name = file.Name }; 
      Assembly asm = Assembly.Load(name); 
      assemblies.Add(asm); 
     } 
    } 

    return assemblies; 
} 

Я добавил .AsTask().ConfigureAwait(false), чтобы остановить его повешение, но теперь он терпит неудачу при попытке загрузить сборку:

«Не удалось загрузить файл или сборку«FDE .Audio.dll»или один из его зависимостей
система не может найти указанный файл.„:“FDE.Audio.dll»

Есть ли что-то, что мне нужно настроить в манифесте? Что-то другое?

Как загрузить сборку в папку моей программы (AppX, я думаю)?

+0

Обратите внимание, что я первоначально пытался ходить по дереву ссылки на сборки с помощью 'Assembly.GetEntryAssembly()' и 'Assembly.GetReferencedAssemblies()', но они не доступны в приложении магазина. Кроме того, я не могу легко получить квалифицированное имя сборки (исключая необходимость получения всех сборок) по различным сложным причинам, когда я получаю типы в виде строки, которые она находится в другой сборке, по сравнению с ее прочитанной. –

+0

'Type.GetType (" MyNamespace.MyType ")' не работает? – I4V

+0

Нет, он должен быть квалифицированным в сборе или в текущем, а это не так. –

ответ

1

Попытка извлечь имя файла без расширения

var filename = file.Name.Substring(0, file.Name.Length - file.FileType.Length); 

AssemblyName name = new AssemblyName() { Name = filename }; 
Assembly asm = Assembly.Load(name);