Мотивация
Я пытаюсь отследить возникшее исключение. NET Платформа при открытии подключения к файлу базы данных Access mdb. Я не открываю соединение с базой данных напрямую, а использую одно из средств Dev Express Xpo (XpoDefault.GetDataLayer (...), если быть точным), которое внутренне пытается создать соединение с предоставленным файлом базы данных mdb. Эта попытка не удалась где-то глубоко. NET Код фреймворка и исключение выдается.
Исключение имеет тип System.Data.OleDb.OleDbException и очень расплывчато об источнике проблемы. В сообщении говорится: «Неизвестная ошибка». ErrorCode - 2147467259 (NativeCode - 0). Очень мало информации, чтобы выяснить, почему не удается установить соединение с базой данных. Я подумал, что, возможно, если углубиться в. NET Код фреймворка раскроет что-то важное об ошибке.
Проблема
Несоответствие исходных файлов при входе. NET Внутреннее устройство каркаса. Несогласованный поток выполнения.
Описание
Мое приложение нацелено. NET Платформа Framework 4.6.1 x86 и встроена в Debug (Release ничего не меняет). Visual Studio Enterprise 2019 v16.6.3 - это IDE, с которой я работаю. Конечно, я сначала прочитал все, что мог, об отладке в. NET Framework, но это не помогло решить мою проблему.
Что я сделал до сих пор? Я успешно загрузил PDB и исходники DevExpres. Нет проблем с этим - я могу следить за выполнением внутри Dev Express (что IMHO подтверждает, что общая настройка отладки довольно правильная). Также кажется, что. NET Framework PDB правильно загружаются с серверов Microsoft во время отладки. Я думаю, что настройки отладки Visual Studio тоже в порядке (насколько мне известно).
All goes well until I need to step into OleDbConnection.cs file which gives the following message:
The problem is that I have all .NET sources available from https://referencesource.microsoft.com. Все (включая обновления) от версии 4.5.1 до последней версии 4.8.
Независимо от того, какой из них я выберу - я всегда получаю одно и то же сообщение о несовпадении версии исходного файла. Когда я игнорирую сообщение и все равно решаю использовать исходный файл, вскоре выясняется, что несоответствие реально. Вместо отслеживания выполнения исходного кода я перешагиваю через комментарии или поток выполнения просто не имеет смысла, и ясно, что представленный исходный код не синхронизируется c с тем, что происходит.
Хорошо, вот и все . Я не мог пройти дальше. Я делаю что-то неправильно? Где искать. NET Источники фреймворка, которые будут соответствовать выполняемым модулям и позволят обнаружить источник исключения, которое я получаю?
Update @ tgolisch
Код, вызывающий исключение:
Session Session;
ReflectionDictionary reflectionDictionary;
string connectionString;
...
Session = new Session(XpoDefault.GetDataLayer(connectionString, reflectionDictionary, AutoCreateOption.SchemaOnly));
Строка подключения, используемая в вызове XpoDefault.GetDataLayer (...):
"Provider=Microsoft.Jet.OLEDB.4.0;Password=;User ID=Admin;Data Source=C:\\Svn\\trunk\\Apps\\bin\\Debug\\DbFile.mdb;Mode=Share Deny None;"
XopDefault.GetDataLayer (...) - это вызов, который не работает и выдает исключение.
Обновление @Perry Qian-MSFT
Я сделал именно то, что вы предложили, безуспешно. Никакого улучшения не было. Тем не менее, я добился неплохого прогресса после отключения оптимизаций системных сборок, как описано здесь . Если оптимизация отключена, становится возможным отслеживание внутренних компонентов. NET Framework. Больше никаких случайных прыжков или переходов через строки комментариев.
Однако это еще не полный успех, потому что я все еще получаю сообщения о несоответствии между исполняемыми модулями и версиями файла исходного кода .
Я также заметил, что хотя мое приложение имеет. NET Framework 4.6.1 в качестве цели, оно все еще использует версию 4.8 системных модулей во время выполнения:
введите описание изображения здесь
Это говорит о том, что я должен использовать. NET Исходные коды Framework 4.8 при входе во внутренние компоненты фреймворка. Но подождите - я перепробовал все источники, которые мог получить, с той же проблемой несоответствия.
Также можно увидеть, что с приложением запущено более одной версии системных сборок - 4.8.4110.0 и 4.8 .3761. 0, что предполагает, что для их создания могли использоваться разные источники.
Тем не менее, независимо от того, какие источники я беру, в какой-то момент всегда появляется сообщение о несовпадении источников. Проблема оптимизации сборки решена. Какие источники фреймворка мне следует использовать сейчас, чтобы синхронизировать их c с запущенными модулями?