У меня есть строка кода, назначение, которое присваивает null при запуске, но когда я захожу в отладчик, строка делает именно то, что я хочу. Строка ...
object instance = typeof(SqlEditorPackage).GetProperty("Instance", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);
На скриншоте ниже вы можете видеть, что локальная переменная instance
имеет значение null, тогда как в часах эта же строка дает мне заполненный объект. Что происходит?
Если это дает кому-то идеи, вот код для свойства 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 года, на которую я ссылался.