Как отлаживать код в созданном мной пакете nuget
У меня есть пакет nuget, который я создал и установил в другом решении, но теперь мне нужно отладить код пакета при вызове из моего нового решения.
Я попытался ссылаться на решение пакета, но не работает.
Я использую Visual Studio 2013.
Ответы
Ответ 1
Для отладки любой DLL вам нужен файл символа (.pdb). Если вы создадите проект в конфигурации debug
, вы увидите, что эти файлы сгенерированы и помещены в папку вывода сборки.
Visual studio загружает эти файлы символов из разных мест, как описано здесь. Но простой способ отладки ваших пакетов nuget заключается в том, чтобы поместить файлы .pdb из пакетов в выходную папку сборки проекта, который вы хотите отлаживать.
Если код, который вы пытаетесь отладить, классифицируется как не-пользовательский код, вам нужно снять отметку Just My Code
в параметрах отладки.
![введите описание изображения здесь]()
Пользовательский и не пользовательский код
Чтобы отличить код пользователя от не-пользовательского кода, Just My Code ищет файлы с символами (.pdb) и оптимизацию программ. Отладчик считает код не-пользовательским кодом, когда бинарный файл оптимизирован или когда файл .pdb недоступен.
Три атрибута также влияют на то, что отладчик считает Моим кодом:
- DebuggerNonUserCodeAttribute сообщает отладчику, что код, к которому он применяется, не является Моим кодом.
- DebuggerHiddenAttribute скрывает код от отладчика, даже если Just My Code отключен.
- DebuggerStepThroughAttribute сообщает отладчику выполнить код, к которому он применяется, а не входить в код.
Все остальные коды считаются кодом пользователя.
Ответ 2
Как отлаживать код в созданном мной пакете nuget
Так же, как NtFreX ответил: "Для отладки любой DLL вам нужен файл символов этого файла (.pdb).". Таким образом, вы можете создавать символьные пакеты, которые позволяют потребителям входить в код вашего пакета в отладчике Visual Studio.
То, как мы это делаем (и работает):
- Создайте "*.symbols.nupkg".
- Разверните пакет символов на сервере SymbolSource.
- Настройте IDE. Потребители пакетов могут добавить https://nuget.smbsrc.net/ к источникам символов в Visual Studio.
- Добавьте необходимую библиотеку в проект с использованием NuGet (с нашего сервера SymbolSource).
- Debug.
Для получения подробной информации, вы можете обратиться к Создание пакетов символов.
Если эти пакеты не подходят для публикации в галерее NuGet/SymbolSource, вы можете поместить файлы *.nupkg и *.symbols.nupkg на локальный диск.
Примечание. Добавьте исходный код в исходные файлы отладки для решения, которое ссылается на пакет (щелкните правой кнопкой мыши Решение, выберите Свойства... Общие свойства... Отладочные исходные файлы и добавьте корневой исходный каталог для соответствующей двоичной ссылки).
Ответ 3
Я получил эту работу, построив проект пакета nuget, созданного в режиме отладки, а затем просто скопировав pdb и dll из каталога отладки в расположение библиотеки Nuget внутри проекта, в котором я хотел его отладить.
например, копия из
ExternalNugetPackage\Bin\Debug\
в
ProjectDirectory\Packages\ExternalNugetPackage.1.0.0\Lib\NET4.5
Ответ 4
Для Visual Studio 2017 и исходного кода пакета nuget, размещенного на GitHub или BitBucket:
1) Включите полную отладочную информацию в файле *.csproj:
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
или щелкните правой кнопкой мыши по свойствам проекта, сборке, расширенным настройкам, выводите отладочную информацию - установите на полную.
2) Чтобы включить автоматическую загрузку исходного кода и пошаговое выполнение для вашего dll-пакета nuget, добавьте пакет SourceLink.Create.CommandLine
в свой проект или добавьте его вручную в файл *.csproj:
<ItemGroup>
<PackageReference Include="SourceLink.Create.CommandLine" Version="2.8.2" PrivateAssets="All" />
</ItemGroup>
Больше информации здесь
3) В инструментах - параметры - отладка, отключите "Включить только мой код" и включите "Подавить оптимизацию JIT при загрузке модуля (только для управляемого)".
После этого вы сможете перейти в методы из вашего dll-пакета nuget.
Ответ 5
Это лучшая статья, которую я нашел: https://capgemini.github.io/development/debugging-into-a-nuget-package/