У меня есть строка, содержащая полное квалифицированное имя, например 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
, я думаю)?
Обратите внимание, что я первоначально пытался ходить по дереву ссылки на сборки с помощью 'Assembly.GetEntryAssembly()' и 'Assembly.GetReferencedAssemblies()', но они не доступны в приложении магазина. Кроме того, я не могу легко получить квалифицированное имя сборки (исключая необходимость получения всех сборок) по различным сложным причинам, когда я получаю типы в виде строки, которые она находится в другой сборке, по сравнению с ее прочитанной. –
'Type.GetType (" MyNamespace.MyType ")' не работает? – I4V
Нет, он должен быть квалифицированным в сборе или в текущем, а это не так. –