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