Невозможно загрузить один или несколько запрошенных типов, но это не нормальная ошибка - PullRequest
1 голос
/ 01 мая 2019

Хорошо, так что это действительно странно, что меня беспокоит. Это будет сложно объяснить, поэтому, пожалуйста, потерпите меня!

Я использую autofac для регистрации некоторых компонентов путем сканирования ссылок.

public static void RegisterHandlersKeyedByEnum(this ContainerBuilder builder, Assembly[] assembliesToScan, Type typeToRegister)
{
    var handlers = assembliesToScan.SelectMany(a => a.GetTypes()).Where(t => t.GetInterfaces().Contains(typeToRegister));

    foreach (var handler in handlers)
    {
        var handlesAttributes = handler.GetCustomAttributes(typeof(HandlesEnumOf), true).Cast<HandlesEnumOf>();
        foreach (var handlesAttribute in handlesAttributes)
        {
            if (handlesAttribute != null)
            {
                builder.RegisterType(handler).AsImplementedInterfaces().Keyed(handlesAttribute.Value, typeToRegister);
            }
        }
    }
}

Со сборками ToScanBeing:

var assembliesToScan = AppDomain.CurrentDomain.GetAssemblies();

Когда я запускаю веб-приложение, я получаю следующую ошибку:

Невозможно загрузить один или несколько запрошенных типов. Получите свойство LoaderExceptions для получения дополнительной информации.

Я знаю, что это за ошибка, и исправил ее много раз. Однако если я просто обновлю страницу через ~ 10-15 секунд, ошибка больше не будет отображаться, и с этого момента веб-приложение можно будет использовать.

Когда я изучил это и проверил исключения LoaderException, следующий тип не смог загрузить "Viper.ViewModels.Users.ADUserViewModel". Вот где это странно. Этот файл не существует нигде. Не путем поиска файлов, даже не поиска текста. Я обнаружил, что это был класс, созданный в совершенно отдельной ветке, которая никогда не объединялась в master (используя GIT).

Теперь, чтобы сделать это еще более странным, если я добавлю в класс ADUserViewModel в папку Viper.ViewModels / Users и даже оставлю класс полностью пустым. Проект выполняется без каких-либо проблем / ошибок.

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

Любые идеи будут высоко оценены и приведут меня в порядок! Я не уверен, какой код можно опубликовать, чтобы лучше объяснить это, но более чем рад предоставить его, если потребуется.

...