Как отлаживать код в созданном мной пакете 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.

То, как мы это делаем (и работает):

  1. Создайте "*.symbols.nupkg".
  2. Разверните пакет символов на сервере SymbolSource.
  3. Настройте IDE. Потребители пакетов могут добавить https://nuget.smbsrc.net/ к источникам символов в Visual Studio.
  4. Добавьте необходимую библиотеку в проект с использованием NuGet (с нашего сервера SymbolSource).
  5. Debug.

Для получения подробной информации, вы можете обратиться к Создание пакетов символов.

Если эти пакеты не подходят для публикации в галерее NuGet /SymbolSource, вы можете поместить файлы *.nupkg и *.symbols.nupkg на локальный диск.

Примечание. Добавьте исходный код в исходные файлы отладки для решения, которое ссылается на пакет (щелкните правой кнопкой мыши Решение, выберите Свойства... Общие свойства... Отладочные исходные файлы и добавьте корневой исходный каталог для соответствующей двоичной ссылки).

Поскольку это может помочь кому-то еще, вот дополнительное объяснение проблемы.

Что мне нужно для отладки созданного мной pkg?

  1. Как говорили другие здесь. файл .pdb .
  2. Кроме того, исходный код , как указано здесь .

Хорошо, как я могу включить исходный код моего пакета nuget?

  • Я должен включить пакеты символов. Этот ответ здесь показал мне, как это сделать.

Я получил это, упаковав пакет в режиме отладки и установив его из моего локального источника NuGet. Затем, когда вы отлаживаете, вы можете войти в свою библиотеку. Вы можете добавить свой локальный источник NuGet, который указывает на вашу локальную папку вTools -> Options -> Nuget Package Manager -> Package Sources

Просто попробуйте использовать это в функции, вызываемой из nuget

Картина

Меня устраивает

Другие вопросы по тегам