Отладка пакетов NuGet с помощью Visual Studio 2017

В Visual Studio 2015 и разработке .NET Core мы могли отлаживать пакеты NuGet, извлекая исходный код из источника (например, GitHub) на локальный диск, добавляя исходный путь к загруженному исходному коду в global.json и ссылаясь на пакет NuGet в нашем проекте. . Это приводило к тому, что ссылка на проекты в загруженном исходном коде автоматически отображалась в текущем решении и, таким образом, облегчалась отладка (подробнее об этой функции можно прочитать на странице в этой статье).

Кто-нибудь знает, как сделать то же самое с помощью Visual Studio 2017? Поскольку global.json ушел, я не могу найти для этого решения.


person Rune G    schedule 13.03.2017    source источник
comment
Точно так же вы делаете это для обычной сборки .NET (да, csproj). Щелкните правой кнопкой мыши решение в окне обозревателя решений › Свойства › Общие свойства › Исходные файлы отладки. Добавьте путь, где хранится исходный код.   -  person Hans Passant    schedule 13.03.2017
comment
Пробовал это, но это по-прежнему не дает мне возможности отлаживать, в пакетах nuget нет файлов pdb, поэтому он не загружается («dotnet.exe» (CoreCLR: clrhost): загружен «C: \ Users\‹MyUser›\.nuget\packages\microsoft.entityframeworkcore\1.1.1\lib\netstandard1.3\Microsoft.EntityFrameworkCore.dll". Символы загрузки пропущены. Модуль оптимизирован и включен параметр отладчика "Только мой код" .). (например, попробуйте пакет Microsoft.EntityFrameworkCore). И добавил путь к корневой папке src, как я сделал в файле global.json в 2015 году.   -  person Rune G    schedule 14.03.2017
comment
Это действительно действительно очень расстраивает, что нет четкого ответа на эту проблему. Не плохой майкрософт. Все это работало очень хорошо с project.json и global.json, пока это не бросило все это.... aagghhhhh   -  person daehaai    schedule 01.04.2017
comment
Я сообщил об этом в качестве отзыва на сайте visualstudio.com (developercommunity.visualstudio.com/content/problem/89455/). Проголосуйте за это, если вы чувствуете это, и следите за этим.   -  person Rune G    schedule 07.08.2017
comment
Если когда-нибудь будет решение этой проблемы, было бы здорово обновить этот пост.   -  person Spaceman    schedule 27.10.2017
comment
@spaceman перейдите по ссылке выше и проголосуйте за нее   -  person Rune G    schedule 09.11.2017
comment
@Spaceman - Ping, одно решение   -  person Rune G    schedule 23.01.2018


Ответы (2)


Я вижу, что это стало популярным вопросом, однако MS (как и в большинстве случаев в настоящее время в Visual Studio) отсутствует в запросах, которые действительно могут улучшить их продукт.

Есть несколько сообщений о том, как использовать справочную библиотеку от Microsoft, но это не относится ко всем проектам, плюс вы будете отлаживать оптимизированные биты выпуска, которые ограничивают возможности как просмотра, так и шага. Я также чувствую, что такой способ еще больше замедляет медленную Visual Studio. Как это сделать, описано в этом сообщении.

Однако в последнее время я нашел способ обойти эту проблему. Это не всегда стабильно, но что можно сделать, так это добавить связанный проект в свой проект в качестве ссылки на проект.

Но вот шаги, которые я сделал, которые в основном работают:

  1. Клонируйте репозиторий пакета nuget из github (или другого источника)
  2. Приложите все усилия, чтобы найти, из какой фиксации был создан пакет nuget (большинство проектов ссылаются либо на теги, либо на ветки, но не ожидайте этого, возможно, лучше сравнить даты пакета nuget и коммитов).
  3. Следуйте инструкциям проекта по его сборке, некоторые из них просто создаются в Visual Studio, другие могут потребовать дополнительных шагов, таких как использование некоторых сценариев сборки в командной строке.
  4. Добавьте ссылку на проект в решение. Иногда вам также потребуется добавить проект, на который ссылается проект, но не всегда. Правил пока не нашел. Кажется, что более новым обновлениям Visual Studio это не нужно.
  5. Добавьте ссылку на проект во ВСЕ проекты, которые ссылаются на пакет nuget в вашем решении. Если этого не сделать, могут возникнуть конфликты, которые компилятор пытается решить наилучшим образом (недостаточно хорошо).

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

Это немного попытка и неспособность заставить эту работу работать, но в конечном итоге она работает.

Можно создать условия для ссылок проекта, чтобы гарантировать, что они не встроены, например. сборки выпуска, однако имейте в виду, что изменение конфигурации требует перезагрузки решения ПОСЛЕ изменения!

person Rune G    schedule 23.01.2018
comment
Я использую аналогичное решение с помощью сценария powershell, который просматривает все файлы proj в целевом решении для ссылок nug, которые я хочу использовать для ссылок proj, ищу новую папку клонов для этого проекта, копирую ее и обновляю ссылку. Это супер болезненное решение. - person Spaceman; 25.01.2018

Я долго с этим боролся. Вот самый простой способ, который я нашел, который работает многократно:

  • Получите исходный код и создайте пакет nuget локально. Вам нужно будет увеличить версию пакета. Надеюсь, автор предоставил .nuspec, чтобы упростить сборку.

Создайте локальный источник nuget:

  • Поместите только что созданный файл .nuget в C:\Nuget (например)

  • В Visual Studio выберите Инструменты/Параметры/Диспетчер пакетов Nuget/Источники пакетов.

  • Нажмите зеленый значок (+). Добавьте путь к локальному пакету nuget, который вы создали выше (C:\Nuget), и переместите источник пакета в начало списка.

  • В своем решении для каждого проекта удалите предыдущую ссылку на внешний пакет nuget и добавьте новый пакет nuget из локального источника nuget.

  • Начните отладку, и вы сможете перейти к коду пакета nuget.

Я могу установить точку останова в исходном коде, из которого я создаю пакет nuget, и он ломается при запуске кода.

Все вышеперечисленные шаги немного суетливы, и вам, возможно, придется поиграть с ними несколько раз, чтобы заставить их работать.

Дайте мне знать в комментариях, работает ли это для вас. И если это так, я был бы признателен за голосование! :)

person Francisco d'Anconia    schedule 14.11.2018