it-swarm.com.ru

Отладка пакетов nuget с использованием Visual Studio 2017

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

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

15
Rune G

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

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

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

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

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

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

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

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

1
Rune G

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

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

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

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

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

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

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

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

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

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

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

0
Francisco d'Anconia