Как Visual Studio знает, соответствует ли исходный файл исходной версии?

Я понял, как файл .NET.dll сопоставляется с .pdb с помощью GUID (blog). Когда я отлаживаю сборку и запрашивает исходный код, если я перехожу к файлу, он может сказать мне, что исходный код отличается от исходного. Как он это знает? Я ожидал, что файл .pdb будет содержать контрольную сумму для каждого файла, но он не отображается. Лучший инструмент, который я нашел, чтобы сбрасывать информацию об отладке, - dia2dump. Файлы С++.pdb имели записи MD5, но файлы С#.pdb этого не сделали.

Сброс С++
dia2dump -f dia2dump.pdb > dia2dump.pdb.files.txt

Сброс С# dia2dump -f Autofac.pdb > Autofac.pdb.files.txt
dia2dump -all Autofac.pdb > Autofac.pdb.all.txt

Есть ли что-то, что я пропустил в "все" свалке?

Он должен использовать контрольную сумму. Если я изменяю один символ в Module.cs, я получаю:
enter image description here

Где найти контрольную сумму для исходного файла, указанного в .pdb?

Ответ 1

Контрольная сумма MD5 хранится в файле .pdb для каждого исходного файла. Если вы ответите "Нет" на вопрос выше "Хочешь, чтобы отладчик его использовал?", Он распечатывает контрольную сумму, которую он искал:

enter image description here

Используя шестнадцатеричный редактор, вы можете видеть, что он определенно находится в .pdb. Моя следующая задача - выяснить, как получить доступ к ней программно. Для файла .pdb я хочу, чтобы он возвращал все имена исходных файлов и их контрольные суммы MD5.

enter image description here