Проблема сервера SymbolSource
Мы настраиваем локальный сервер SymbolSource для нашей команды разработчиков. Мы следили за хорошей статьей, написанной на сервере SymbolSource. Мы используем TeamCity для строительства. Для каждой сборки .symbols.nupkg
выталкивается на локальный SymbolSource с помощью nuget push
Пакет команд и nuget отправляется на локальный сервер NuGet.
Проблемы, с которыми мы сталкиваемся:
Для пакета nuget MyPackage.1.1.0, если мы нажимаем на сервер символов, он создает хеш, и таким образом он связывается для загрузки каждой папки версии .pdb
файлы и .cs
файлы. (Это мое понимание. Пожалуйста, поправьте меня, если я ошибаюсь).
После настройки конфигурации сервера символов в Visual Studio мы пытаемся отладить проект. Мы испытываем то, что хэш, сгенерированный Visual Studio для загрузки символов, полностью отличается от хэша, сгенерированного при регистрации с использованием nuget push
на сервере символов, который заканчивается на 404. (См. вложенный файл с кодом состояния fiddler.) Если мы вручную создадим папку с тем же хешем на сервере Symbol, мы получим желаемый результат, то есть шаг в код.
Почему существуют два разных хэша для одной и той же версии файла dll/nuget?
1 ответ
Получаемые вами значения не являются хешами (так как они не являются хешами содержимого файлов), они представляют собой GUID. Каждой паре DLL - PDB присваивается GUID при сборке. Каждая сборка DLL имеет свой GUID, даже если они построены из одного и того же исходного кода! Это означает, что единственный способ получить PDB от сервера символов - это использовать точно такую же DLL. Тот факт, что вы получаете совершенно другой GUID, указывает на то, что вы не используете одну и ту же DLL. Таким образом, сценарий, который я могу придумать в этом случае:
- Ваш пакет символов nuget содержит dll, отличающийся от вашего обычного пакета nuget. Это кажется маловероятным, если вы генерируете оба одновременно, но если вы собираете пакет и двоичные файлы более одного раза, это возможно.
- Вы не используете dll из пакета nuget, для которого пакет символов зарегистрирован на вашем сервере символов
- Вы вообще не используете dll из пакета nuget
Причина, по которой ваше "исправление" работает, заключается в том, что Visual Studio, по-видимому, использует только GUID для создания пути поиска символа, но не проверяет GUID PDB при его загрузке. Другими словами, предполагается (справедливо), что сервер символов размещает символы в правильном месте.
Лучший способ решить вашу проблему - выяснить, откуда вы берете различные библиотеки DLL. Вы можете использовать утилиту dumpbin, чтобы узнать, какая PDB связана с какой DLL, используя
dumpbin.exe /headers mypackage.dll
Это должно привести к выводу, содержащему где-нибудь путь к файлу PDB и (!) GUID, который связывает DLL и PDB. Если вы сравните GUID и временные метки DLL на вашем компьютере с временными метками в DLL / PDB на сервере символов, вы сможете определить, где что-то пошло не так.