Получение ReflectionTypeLoadException при 2-й попытке отражения в .net 4 - PullRequest
2 голосов
/ 25 августа 2010

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

    public static List<Type> GetAllTestActionFormTypes()
    {
        List<Type> types = new List<Type>();

        // add all the types that are subclasses of BaseCamaForm to the _camaFormType list
        foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
            foreach (Type t in asm.GetTypes())
                if (t.IsSubclassOf(typeof(BaseCamaForm)))
                    types.Add(t);

        return types;
    }

Этот метод работает правильно при первом вызове.Однако при повторном вызове этого метода при вызове asm.GetTypes() возникает следующее исключение:

ReflectionTypeLoadException was unhandled by user code: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

При просмотре свойства LoaderException я обнаружил System.IO.FileLoadException со следующим сообщением:

Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

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


Редактировать: После дополнительных исследований, единственные сборки, на которые я ссылаюсьВерсии выполнения 2.0.50727 имеют Microsoft.TeamFoundation.Client и Microsoft.TeamFoundation.VersionControl.Client.Я не могу понять, почему эти ссылки вызывают проблемы с размышлениями, или почему это происходит только со 2-й попытки.Это, кажется, также происходит спорадически при попытке использовать вызов Activator.CreateInstance(types[x]) в некоторых классах.

1 Ответ

2 голосов
/ 25 августа 2010

Очевидно, мне пришлось добавить <startup useLegacyV2RuntimeActivationPolicy="true" /> в мой файл app.config. Как только я это сделал, у меня больше не возникало исключений отражения. Я до сих пор не знаю, почему он это сделал, но, по крайней мере, это исправлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...