Отладочная информация интерфейса C#, не связанная с источниками
Я пытаюсь перенастроить макет очень большого решения, с которым стало невозможно (и медленно) работать. Мой план состоит в том, чтобы создать ряд решений, содержащих связанные проекты, а затем использовать бинарные ссылки, где это необходимо, для ссылки на библиотеки, созданные другими решениями.
Чтобы сделать это полезным, мы полагаемся на функциональность Resharper Navigate to External Sources, поэтому мы можем легко просматривать источники проектов, на которые ссылаемся другие решения. Почему VS не может сделать это "из коробки", мне не под силу.
Это все работает очень хорошо для классов с реализацией. Однако для интерфейсов и классов C#, содержащих только автоматически реализуемые свойства, Resharper не может просматривать источники и использует грубую программу просмотра метаданных.
Я использовал srctool.exe, который поставляется с инструментами Symbol Server в MS Debugging Tools for Windows, чтобы просмотреть источники, перечисленные в файле.pdb, и ясно, что источники для этих интерфейсов и пустых (ish) классов не упоминаются в файл pdb. Если я переключаю автоматически внедряемые свойства на свойства с полями поддержки, то ссылка на источник появляется в pdb.
Я предполагаю, что источники исключены, потому что нет мест, где вы могли бы установить точки останова на интерфейсах и автоматически реализованных свойствах.
Мне интересно, однако, если есть какая-то экзотическая опция компилятора или обходной путь, который мы можем использовать, чтобы заставить файл PDB включать ссылки на источник интерфейсов C#.
Спасибо Марк
1 ответ
Вопрос не имеет достаточно деталей. Отбросив бедро, я думаю, что вы решили проблемы с медленным массовым решением, преобразовав ссылки на проекты в ссылки на сборки. И использовал сборку Release этих проектов в качестве ссылки.
И да, это ставит в тупик любой инструмент, который пытается найти файлы исходного кода из PDB. В сборке релиза проекта.NET используется урезанная версия PDB, из него удалена вся информация о файле исходного кода и номере строки. Это довольно обычная вещь для реальных сборок релизов. Выпуск встроенного кода обычно оптимизирован. Это приводит к переупорядочению кода, который больше не соответствует логической позиции кода в исходном файле. Любая информация, которую вы получаете от информации PDB "источник + линия", теперь имеет тенденцию переходить между вредной и бесполезной, вы начинаете искать проблему не в том месте.
Однако это не относится к инструментам IDE или при отладке вашего приложения. В таком случае оптимизатор автоматически отключается. Фактически элемент конфигурации в VS: Инструменты + Опции, Отладка, Общие, опция "Подавить оптимизацию JIT при загрузке модуля". Включено по умолчанию.
Понятно, что любой инструмент, использующий PDB, приходит в ужас, когда у него нет возможности найти исходные файлы. Чтобы исправить это, нужно вернуться к исходному проекту, снова выбрать конфигурацию выпуска и изменить настройку: Project + Properties, вкладка Build, прокрутить вниз, кнопку Advanced. Измените комбинацию "Информация об отладке" с "pdb-only" на "full". Перестройте проект.
Должен исправить вашу проблему. Также восстанавливает отладчик, вы можете снова войти в исходный код.
Не перемещайте файлы слишком много между прочим, вы можете снова поставить в тупик. По крайней мере, храните PDB с DLL в том же каталоге. Если исходный код больше не присутствует в той же директории, но вы снова проверили его в другой, то вы должны сообщить об этом IDE. Щелкните правой кнопкой мыши на решении, Свойства, Настройка отладочных исходных файлов.