Actuellement, j'emballe les builds de version avec Nuget pour les builds officiels sur nuget.org, mais je package les builds de débogage avec Nuget pour les poussées de source de symbole vers Symbolsource.org.
EDIT: (Jon Skeet, avec un parti pris du développement de Noda Time)
NuGet prend désormais en charge le transfert vers la galerie NuGet et Symbolsource.org (ou des serveurs similaires), comme indiqué . Malheureusement, il y a deux exigences contradictoires ici:
- Lorsque vous utilisez simplement une bibliothèque sans aucun débogage, vous voulez vraiment une version de version. C'est à cela que servent les versions de version, après tout.
- Lors du débogage dans une bibliothèque à des fins de diagnostic, vous voulez vraiment une version de débogage avec toutes les optimisations appropriées désactivées. C'est à cela que servent les builds de débogage, après tout.
Ce serait bien, mais NuGet ne permet pas (pour autant que je sache) que les versions de version et de débogage soient publiées de manière utile, dans le même package.
Ainsi, les choix sont:
- Distribuez les versions de débogage à tout le monde (comme indiqué dans l'exemple de la documentation) et en direct avec n'importe quelle taille et performances.
- Distribuez les versions de version à tout le monde et vivez avec une expérience de débogage légèrement altérée.
- Optez pour une politique de distribution vraiment compliquée, fournissant potentiellement des packages de version et de débogage séparés.
Les deux premiers se résument vraiment à l'effet des différences entre les versions de débogage et de publication ... bien qu'il soit intéressant de noter qu'il y a aussi une grande différence entre vouloir entrer dans le code d'une bibliothèque parce que vous voulez vérifier un comportement et vouloir pour déboguer le code d'une bibliothèque parce que vous pensez avoir trouvé un bogue. Dans le second cas, il est probablement préférable d'obtenir le code de la bibliothèque en tant que solution Visual Studio et de le déboguer de cette façon, donc je ne prête pas trop attention à cette situation.
Ma tentation est de rester avec les versions de version, avec l'espoir que relativement peu de personnes auront besoin de déboguer, et celles qui le feront ne seront pas beaucoup affectées par les optimisations de la version de version. (Le compilateur JIT effectue la plupart de l'optimisation de toute façon.)
Alors, y a-t-il d'autres options que nous n'avions pas envisagées? Y a-t-il d'autres considérations qui font pencher la balance? Le transfert de packages NuGet vers SymbolSource est-il suffisamment nouveau pour que les «meilleures pratiques» n'aient pas vraiment été établies?
nuget pack ... -Symbol
et de pousser les packages générés ...Réponses:
Parlant pour SymbolSource, je pense que la meilleure pratique consiste à:
Pendant que nous y sommes, c'est une idée fausse courante que les versions de version et de débogage dans .NET diffèrent vraiment beaucoup, mais je suppose que la différenciation est ici en raison de divers codes qui pourraient ou non être inclus dans l'une ou l'autre des versions, comme Debug .Asserts.
Cela dit, cela vaut vraiment la peine de pousser les deux configurations vers SymbolSource, car vous ne savez jamais quand vous allez avoir besoin de déboguer le code de production. À distance en production pour rendre les choses plus difficiles. Vous allez avoir besoin de l'aide que vous pouvez obtenir de votre outillage lorsque cela se produit. Ce que je ne souhaite évidemment à personne.
Il y a encore une question à considérer concernant le contrôle des versions: est-il correct d'avoir 2 packages différents (build en debug et en release) partageant 1 numéro de version? SymbolSource accepterait cela, car il extrait les packages et stocke les binaires dans des branches de mode de construction distinctes, SI UNIQUEMENT NuGet est autorisé à étiqueter les packages en conséquence. Il n'existe actuellement aucun moyen de déterminer si un package est en mode débogage ou en mode version.
la source
Debug.Assert
etc. - mais pourriez-vous développer (dans votre réponse) les implications lors du débogage? À quel point utilise-t-il une version Release?Je suis entièrement d'accord avec votre conclusion. Packages NuGet avec RELEASE et SymbolSource avec debug. Il semble assez rare d'entrer directement dans les packages et un faux pas de débogage occasionnel avec les optimisations activées peut être acceptable.
S'il y avait vraiment un problème, je pense que la solution idéale serait que NuGet le prenne en charge. Par exemple, imaginez si lors du débogage, il pourrait remplacer la DLL de version par celle incluse dans le package SymbolSource.
Dans l'idéal, ce qui se passerait alors, c'est que, par
nuget pack SomePackage -Symbols
rapport à une version de publication, créerait un package nuget de version, mais un package de symboles de débogage. Et le plugin VS serait mis à jour pour être suffisamment intelligent pour voir l'association et extraire les assemblys Debug lors de l'exécution dans un débogueur et les charger à la place. Un peu fou, mais ce serait intéressant.Cependant, je ne vois tout simplement pas assez de gens se plaindre de cela pour que cela en vaille la peine pour le moment.
L'équipe NuGet accepte les demandes d'extraction. :)
la source
L'exemple présenté dans Création et publication d'un package de symboles fait référence aux fichiers des répertoires de débogage en tant que sources pour les fichiers dll et pdb.
Étant donné que le but de la publication des symboles est de permettre à d'autres personnes de parcourir votre code lors du débogage, il semble plus prudent de publier une version du code destinée au débogage sans optimisations qui pourraient affecter le pas de code.
la source