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

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

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