Несоответствие исходных файлов при входе в. NET Код фреймворка - PullRequest
2 голосов
/ 14 июля 2020

Мотивация

Я пытаюсь отследить возникшее исключение. 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 тоже в порядке (насколько мне известно).

enter image description here

All goes well until I need to step into OleDbConnection.cs file which gives the following message:

enter image description here

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 с запущенными модулями?

1 Ответ

0 голосов
/ 15 июля 2020

Несоответствие исходных файлов при входе. NET Код фреймворка

Пожалуйста, повторно подключите базу данных DB Access, чтобы обновить sh базу данных на случай, если в базе данных есть ошибки сборки Layer.

Помимо , пожалуйста, следуйте этим советам, чтобы решить вашу странную проблему:

1) Инструменты -> Параметры импорта и экспорта -> Сброс всех настроек -> .. Общие для сброса всех настроек отладки.

2 ) затем закройте VS, удалите .vs скрытую папку в папке решения, bin и obj папку.

...