#visual-studio #debugging #visual-studio-2019
#visual-studio #отладка #visual-studio-2019
Вопрос:
Оригинальный вопрос
(Инструкцию по воспроизведению см. В Обновлении II)
Недавно я возился с Visual Studio 2019 во время сеанса отладки. Я закрепил некоторые свойства класса «SqlCommand» как «Избранное». С этого момента я получаю сообщение об ошибке «внутренняя ошибка, извлекающая локальное значение» в «locals».
Справа от столбца значений есть кнопка «обновить», и когда я нажимаю на нее, я получаю сообщение «Внутренняя ошибка в вычислителе выражений».
Теперь я не могу отключить это конкретное свойство, потому что дерево классов больше не может быть открыто.
Это поведение не привязано к конкретному решению, я создал новое демонстрационное решение, в котором у меня точно такая же проблема.
Вы можете увидеть это на скриншоте ниже:
Основной целью было бы каким-то образом очистить информацию о том, какое свойство классов закреплено в окне «locals».
Я уже попробовал несколько способов избавиться от ошибки.
- Похоже, что VS каким-то образом хранит информацию о том, какие свойства помечены, поэтому я попытался удалить «ComponentModelCache» в AppData.
- Я сбрасываю настройки.
- Я использую средство восстановления в установщике.
- Я удалил файл * .suo, а затем удалил всю папку .vs .
- Я вижу ту же проблему, когда запускаю devenv в /safemode.
- devenv / resetuserdata также не помогли
- Я просмотрел журнал действий, но никаких подсказок нет.
- Я изменил целевую структуру проекта с 4.7.2 на 3.5
Я использую стандарт Windows Server 2019, .Net Framework 4.7.2, Visual Studio 2019 16.7.6
Я использую следующий код в демонстрационном приложении:
private static int Main(string[] args)
{
SqlConnection conn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
return 0;
}
ОБНОВЛЕНИЕ I
Это функция закрепления, о которой я говорю. Я показываю это на примере свойства WorkstationId объекта SqlConnection (потому что оно в SqlCommand больше не работает). Я полагаю, что я использовал его в тексте команды и свойстве parameters. Свойство pinnable является относительно новой функцией, представленной в версии 16.4
ОБНОВЛЕНИЕ II: инструкция по воспроизведению
- Выполните новую установку Visual Studio 2019
- Создайте новый консольный проект
- Используйте код, который я опубликовал выше в исходном вопросе
- Установите точку останова после создания объекта Command
- Отладка проекта [F5]
- Откройте окно «Locals».
- Разверните переменную cmd и прокрутите, пока не найдете свойство «Параметры»
- Закрепите свойство параметров (как описано в обновлении I)
- Остановить отладку
- Запустите отладчик снова
- Откройте окно «Locals».
- Вы видите ошибку «внутренняя ошибка при получении локального значения»
- Нажмите на значок «Обновить» (это круглая стрелка в правой части столбца значений)
- Вы видите ошибку «Внутренняя ошибка в средстве вычисления выражений», как описано в исходном вопросе.
ОБНОВЛЕНИЕ III (больше экспериментов, которые не помогли)
- Я использовал «исправить установку» из установщика VS.
- Я удалил и переустановил VS.
- Я полностью удалил всю папку %USER%/ AppData / …/ VisualStudio
Комментарии:
1. Этот вопрос заслуживает большего количества голосов, поскольку это такая неясная, но все же хорошо представленная ошибка.
2. У меня такая же проблема на VS2019 после закрепления одного элемента в массиве во время отладки. И все еще не могу решить проблему.
Ответ №1:
В папке есть файл, вызываемый ObjectFavorites.json
:
%USER%/Documents/Visual Studio 2019/Visualizers
Он имеет следующее содержимое:
{
"$schema": "https://aka.ms/vs/debugger-managed-favorites-schema",
"types": {
"System.Data.SqlClient.SqlCommand": {
"favorites": [
"Parameters"
]
}
}
}
Удалите строку "Parameters"
.
Вам даже не нужно останавливать или перезапускать VS, вы можете редактировать этот файл на лету. Запустите отладчик снова после удаления строки, и ошибка исчезнет.
Комментарии:
1. Большое вам спасибо. В моем случае я переопределил свойство базового класса, потому что имя свойства необходимо было сохранить, но тип данных изменился. И когда я затем допустил ошибку, пытаясь закрепить буквально «новую» версию, это нарушило представление переменной для всего класса.
Ответ №2:
На моей стороне я не сталкивался с такой же проблемой.
Итак, возможно, вы могли бы попробовать следующие предложения:
1) щелкните правой кнопкой мыши в свойствах проекта -> Сборка -> Дополнительно -> — изменить информацию об отладке на Full
.
2) установите флажок Использовать режим управляемой совместимости в меню Инструменты -> Параметры -> Отладка -> Общие
3) введите C:Usersxxx(current user)AppDataLocalMicrosoftVisualStudio16.0_xxxSettings
откройте каждый файл, а затем выполните поиск этого:
<PropertyValue name="UseVBCSLegacyExpressionEvaluator">0</PropertyValue>
Затем измените значение 0
на 1
. Сохраните изменения, перезапустите VS для повторного тестирования. А также вы должны запустить его от имени администратора.
Комментарии:
1. Спасибо, что нашли время и помогли мне с проблемой. К сожалению, это не решило проблему. Когда я включаю режим управляемой совместимости config Use , я больше не вижу ошибки, но я также больше не могу использовать функцию закрепления. (Я описал функцию закрепления в обновлении по этому вопросу.) Как только я выключу ее, я снова смогу использовать функцию закрепления, но ошибка возвращается. Значение в «UseVBCSLegacyExpressionEvaluator» автоматически изменяется на 0 каждый раз, когда я закрываю VS. Я собираюсь предоставить инструкцию по воспроизведению позже сегодня.
2. Привет, Перри. Я проверю это еще раз. Между тем, вы можете ознакомиться с моей инструкцией по воспроизведению, которую я разместил внизу в разделе «Обновление II».
3. Конечно. Я использую блокнот, чтобы открыть каждый
vs.settings
файл, а затем изменить значение, затем нажмите Сохранить. Я пытаюсь несколько раз, а затем значение не будет изменено с момента перезапуска VS. И я попробую ваши шаги.4. Теперь я могу подтвердить выполнение следующих шагов: 1. Измените параметры. 2. Закройте VS. 3. найдите все файлы * .vssettings в папке AppData … VisualStudio. 4. Откройте его в VSCode 5. Измените его с «0» на «1», сохраните его. 6. Откройте решение в VS, запустите отладчик. 7. Я могу проверить переменную, но не могу закрепить или отменить какое-либо свойство. 8. Остановите отладчик, закройте VS. 9. Снова откройте файл * .vssettings в VSCode -> значение снова равно «0». 10. Снова откройте VS, измените параметры на обычные, запустите отладчик, ошибка все еще там.
5. При изменении вы
CurrentSettings.vssettings
должны убедиться, что вы закрыли все VS в то время. 1. закройте все vs, введитеC:UsersxxxAppDataLocalMicrosoftVisualStudio16.0_xxxSettingsCurrentSettings.vssettings
2. затем используйтеNotePad
вместоvs code
, чтобы открыть его, измените значение, а затем щелкнитеSave
. Закройте этот файл, перезапустите VS, а затем будет использовано измененное значение. Вы можете снять флажокUse Managed Compatibility Mode
, поскольку вы этого хотите. Кроме того, следуйте вашим инструкциям, и я не столкнулся с той же ошибкой, которую вы описали, и, возможно, вы могли бы переключить другой компьютер для ее тестирования.