В настоящее время я упаковываю сборки релизов с помощью Nuget для официальных сборок на nuget.org, но я упаковываю сборки отладки с помощью Nuget, чтобы источник символов подталкивал к symbolource.org.
EDIT: (Джон Скит, с некоторым уклоном от разработки Noda Time)
Теперь NuGet поддерживает нажатие как галереи NuGet, так и symbolource.org(или аналогичных серверов) как описано в документе. К сожалению, здесь есть два противоречивых требования:
- Когда вы просто используете библиотеку без необходимости отладки, вам действительно нужна сборка релиза. В конце концов, для чего нужны версии для сборки.
- При отладке в библиотеке для целей диагностики вам действительно нужна отладочная сборка с отключенными всеми оптимизационными оптимизациями. То, что для сборки отладки, в конце концов.
Это было бы хорошо, но NuGet (насколько я могу судить) не позволяет опубликовать как выпуск, так и debug-сборки в полезном виде в том же пакете.
Итак, выбор:
- Распределите сборки отладки для всех (как показано в примере в документах) и живите с любым размером и производительностью.
- Распространяйте сборку релизов для всех и живите с немного ослабленным опытом отладки.
- Перейдите к действительно сложной политике распространения, потенциально предоставляя отдельные пакеты выпуска и отладки.
Первые два действительно сводятся к влиянию различий между сборками debug и release... хотя стоит отметить, что существует также большая разница между желанием вступить в код библиотеки, потому что вы хотите проверить какое-то поведение, и хотите отладить код библиотеки, потому что вы считаете, что обнаружили ошибку. Во втором случае, вероятно, лучше получить код библиотеки в качестве решения Visual Studio и отладить этот путь, поэтому я не уделяю слишком много внимания этой ситуации.
Мое искушение состоит в том, чтобы просто поддерживать сборку релизов, ожидая, что относительно мало людей придется отлаживать, а те, кто это делает, не будут сильно влиять на оптимизацию в сборке релизов. (В любом случае компилятор JIT делает большую часть оптимизации.)
Итак, есть ли другие варианты, которые мы не рассматривали? Есть ли другие соображения, которые подсказывают баланс? Является ли толкание пакетов NuGet на SymbolSource достаточно новым, что "наилучшая практика" действительно не установлена?