Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Используйте BuildManager.GetType для просмотра сборок в WPF

Автор вопроса: AlexОтветов: 2

У меня есть код для приложения ASP .NET, которое использует отражение для загрузки поставщиков данных. Я хотел бы повторно использовать этот код в приложении WPF, но похоже, что BuildManager.GetType просматривает только сборки верхнего уровня, если приложение не является ASP .NET. Кто-нибудь знает, как обойти это ограничение?

Следующий код создает исключение, говорящее о том, что DotNetNuke.Data.MySqlDataProvider не может быть найден в сборке System.Web. Сборка, содержащая класс DotNetNuke.Data.MySqlDataProvider, определенно существует в папке bin скомпилированного приложения WPF.

Dim objType Type = BuildManager.GetType("DotNetNuke.Data.MySqlDataProvider", True, True)

reflectionwpfgettype

Ответы

Ответ 1 · Community

Попробуйте использовать AppDomain для поиска типа, например:

    private Type GlobalGetType(string typeName)
    {
        Type t = null;

        foreach (Assembly ass in AppDomain.CurrentDomain.GetAssemblies())
        {
            Type assType = ass.GetType(typeName);

            if (t != null && assType != null)
                throw new ArgumentException("The specified type was found on different assemblies (\"" + t.Assembly.FullName + "\" and  \"" + ass.FullName + "\")");

            if (assType != null)
                t = assType;
        }

        return t;
    }

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

Ответ 2 · FlavioG

Решение AppDomain.CurrentDomain.GetAssemblies() допустимо только в том случае, если вас интересуют уже вызванные/введенные. В этом ответе Игорь объяснит это и представит пару обходных путей. Как найти тип, который еще не загружен в AppDomain?

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы