Используйте BuildManager.GetType для просмотра сборок в WPF - PullRequest
0 голосов
/ 25 марта 2009

У меня есть код для приложения 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)

1 Ответ

0 голосов
/ 14 августа 2009

Попробуйте использовать 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;
    }

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

...