Отражение. Почему моя строка в коде возвращает null, но отлично работает в отладчике? - PullRequest
0 голосов
/ 06 мая 2020

У меня есть строка кода, назначение, которое присваивает null при запуске, но когда я захожу в отладчик, строка делает именно то, что я хочу. Строка ...

object instance = typeof(SqlEditorPackage).GetProperty("Instance", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);

На скриншоте ниже вы можете видеть, что локальная переменная instance имеет значение null, тогда как в часах эта же строка дает мне заполненный объект. Что происходит?

enter image description here

Если это дает кому-то идеи, вот код для свойства Instance из SqlEditorPackage.dll, посещенного с помощью ilspy

    internal static SqlEditorPackage Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = (DemandLoadPackage("fef13793-c947-4fb1-b864-c9f0be9d9cf6") as SqlEditorPackage);
            }
            return _instance;
        }
        private set
        {
            _instance = value;
        }
    }

При включении всех исключений я вижу следующую ошибку, одну из примерно 15 однотипных для различных сборок ...

Помощник по управляемой отладке 'LoadFromContext' Сообщение = Помощник по управляемой отладке 'LoadFromContext': 'Сборка с именем' Microsoft.VisualStudio.Data.Tools.SqlEditor 'была загружена из' file: /// C: / Program Files (x86) / Microsoft Visual Studio / 2019 / Community / Common7 / IDE /Extensions/Microsoft/SQLEditor/Microsoft.VisualStudio.Data.Tools.SqlEditor.dll 'с использованием контекста LoadFrom. Использование этого контекста может привести к неожиданному поведению при сериализации, приведении типов и разрешении зависимостей. Практически во всех случаях рекомендуется избегать контекста LoadFrom. Это можно сделать, установив сборки в глобальном кэше сборок или в каталоге ApplicationBase и используя Assembly.Load при явной загрузке сборок. '

Я не знаю, является ли это частью проблемы, но я отмечаю что это относится к версии SqlEditorPackage 2019 года, а не к версии 2015 года, на которую я ссылался.

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