Рекомендации по использованию Nuget: отладка или выпуск?


В настоящее время я упаковываю сборки выпуска с помощью Nuget для официальных сборок nuget.org, но я упаковываю отладочные сборки с помощью Nuget для источника символов symbolsource.org.

EDIT: (Джон Скит, с некоторым уклоном от развития времени Нода)

NuGet теперь поддерживает нажатие на обе галереи NuGet и symbolsource.org (или аналогичные серверы),как документально. К сожалению, есть два противоречивых требования здесь:

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

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

Итак, варианты:

  • распределите отладочные сборки для всех (как показано в Примере в документах) и жить с любым размером и производительности хитов.
  • распространяйте сборки выпуска для всех и живите с немного нарушенным опытом отладки.
  • перейти на действительно сложную политику распространения, потенциально обеспечивая отдельный выпуск и отладку пакеты.

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

мое искушение состоит в том, чтобы просто держать с выпуском сборки, с ожиданием, что относительно мало кому нужно будет отлаживать, и те, кто это делает, не будут затронуты много по оптимизации в сборке выпуска. (JIT-компилятор все равно выполняет большую часть оптимизации.)

Итак, есть ли другие варианты мы даже не рассматривали? Есть ли другие соображения, которые подсказывают баланс? Является ли нажатие пакетов NuGet на SymbolSource достаточно новым, что" лучшая практика " действительно не была установлена?

3 76

3 ответа:

говоря о SymbolSource, я считаю, что лучшей практикой является:

  1. Push release binary + content packages to nuget.org только (или любой другой производственный корм)
  2. нажать отладка бинарных+пакеты контента в ленту развития :
    • на помещение
    • ВКЛ myget.org
    • ВКЛ nuget.org в качестве предрелизных пакетов.
  3. нажмите как релиз и отладка двоичных + символов пакетов symbolsource.org или любой другой хранилище символов.

в то время как мы на нем, это распространенное заблуждение, что релиз и отладка сборки в .NET действительно сильно отличаются, но я предполагаю, что дифференциация здесь из-за различного кода, который может или не может быть включен в любую сборку, например Debug.Утвердит.

тем не менее, это действительно стоит нажимать обе конфигурации в SymbolSource, потому что вы просто никогда не знаете, когда вам понадобится отладка кода. Удаленно в производстве, чтобы сделать это сложнее. Вам понадобится помощь, которую вы можете получить от своего инструмента, когда это произойдет. Чего я, очевидно, никому не желаю.

есть еще вопрос, который следует рассмотреть в отношении управления версиями: правильно ли иметь 2 разных пакета (сборка в отладке и в выпуске) с общим номером версии 1? SymbolSource примет это, потому что он извлекает пакеты и хранит двоичные файлы в отдельных ветвях режима сборки, если только NuGet разрешит соответствующим образом помечать пакеты. Нет возможности присутствует, чтобы определить, является ли пакет режимом отладки или выпуска.

Я полностью согласен с вашим выводом. Пакеты NuGet с выпуском и SymbolSource с отладкой. Кажется довольно редким переходить непосредственно в пакеты, и иногда ошибка отладки с включенной оптимизацией может быть приемлемой.

Если бы действительно была проблема, я думаю, что идеальным решением было бы иметь поддержку NuGet. Например, представьте, что при отладке он может заменить DLL выпуска на тот, который включен в SymbolSource пакет.

в идеале, что бы было потом что nuget pack SomePackage -Symbols против версии выпуска будет создан пакет release nuget, но пакет debug symbols. И плагин VS будет обновлен, чтобы быть достаточно умным, чтобы увидеть ассоциацию и вытащить сборки отладки при запуске в отладчике и загрузить их вместо этого. Странно, но было бы интересно.

однако, я просто не вижу достаточно людей, жалующихся на это, что он стоит на момент.

команда NuGet принимает запросы на вытягивание. :)

пример создание и публикация пакета символов ссылки на файлы в каталогах отладки в качестве источников для файлов dll и pdb.

Указание Содержимого Пакета Символов

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

<files>
  <file src="Full\bin\Debug\*.dll" target="lib\net40" /> 
  <file src="Full\bin\Debug\*.pdb" target="lib\net40" /> 
  <file src="Silverlight\bin\Debug\*.dll" target="lib\sl40" /> 
  <file src="Silverlight\bin\Debug\*.pdb" target="lib\sl40" /> 
  <file src="**\*.cs" target="src" />
</files>

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