Gestion des packages NuGet internes avec accès au code source


20

Nous avons beaucoup de bibliothèques internes que nous aimerions partager entre les projets au sein de l'entreprise. Voici quelques-unes des exigences:

  • les sources des bibliothèques sont stockées dans des référentiels séparés des projets finaux
  • les projets finaux incluent des bibliothèques via NuGet
  • il doit être possible d'inspecter facilement le code source d'une bibliothèque donnée tout en travaillant sur un projet final

La configuration de notre référentiel NuGet privé n'est pas un problème, mais la gestion des sources l'est. Nous avons essayé d'exposer les sources via le serveur source et cela fonctionne un peu , mais pas tout à fait: VS télécharge les sources lors du débogage du code externe, mais pas lorsque vous essayez de naviguer vers la définition / implémentation. Fondamentalement, vous ne pouvez accéder au code source que lors du débogage, ce qui n'est pas tout à fait ce dont nous avons besoin.

Donc, les questions sont:

  • quels moyens existent pour fournir l'accès au code source des bibliothèques internes sans avoir besoin d'avoir le code dans le même référentiel / solution
  • Existe-t-il un moyen de configurer la combinaison de serveurs Symbol / Feed NuGet afin que VS utilise les symboles pour la navigation, pas seulement pour le débogage?

L'utilisation de ReSharper / autres compléments est une option.


2
Nous avons trouvé l'utilisation de Nuget pour la gestion de projets internes sous-optimale; nous l'avons finalement arraché en faveur des références de projet et de DLL. Je serais ravi d'entendre parler de quelqu'un qui a réussi à faire ce travail.
Robert Harvey

Avez-vous également configuré un serveur de symboles pour les fichiers pdb qui correspondent aux DLL contenues dans vos packages NuGet?
RubberDuck

3
Nous avons exactement la même configuration sur mon lieu de travail actuel. Serveur NuGet (contient des DLL sans PDB) plus serveur de symboles (contient des DLL, PDB et sources). Nous avons également le même problème (sources et PDB récupérés uniquement lors du débogage). @RobertHarvey: Le gestionnaire de packages NuGet est un mauvais client NuGet. Il ne fait pas de distinction entre les dépendances directes et transitoires et nécessite des actions idiotes de «consolidation». Nous sommes passés à Paket et n'avons jamais regardé en arrière depuis. Il a rendu la gestion des colis saine et supportable, à la limite de l'agréable.
Allon Guralnek

2
Je dois demander - bien que je ne pense pas que ce soit une exigence déraisonnable - pourquoi avez-vous besoin de pouvoir regarder dans les paquets partagés / communs? Théoriquement, au moins, ces cases devraient être documentées et la nécessité de regarder à l'intérieur devrait être l'exception plutôt que la norme. Dans tous les cas, ils sont disponibles dans votre référentiel source et il devrait donc être assez simple de télécharger la solution à inspecter. Je peux voir un certain nombre de raisons pour lesquelles cela ou des parties de cela pourraient ne pas être entièrement le cas, mais cela vaut toujours la peine d'être demandé.
Murph

4
@Murph - Je ne suis pas l'OP, mais d'après mon expérience, la documentation ne capture jamais les détails que je veux. Dois-je nettoyer cet état ou est-ce que l'appelé? Qu'est-ce que cela échappe exactement? En quoi ces surcharges diffèrent-elles? Ces entités soutiennent-elles l'égalité, et si oui, sur la base de quoi? Quelle est la complexité approximative de cet appel? La seule documentation détaillée qui mérite d'être détenue est la source (propre), car il y a toujours et généralement des choses que le documentateur n'a jamais envisagées mais qui sont importantes pour vous. Pire, une documentation complexe contient inévitablement des erreurs et devient obsolète.
Eamon Nerbonne

Réponses:


1

Ce qui devrait fonctionner consiste simplement à extraire le code source du package NuGet et à ouvrir la solution dans une instance distincte de Visual Studio.

Visual Studio a une astuce intéressante pour basculer entre le code dans les instances ouvertes en déterminant ce que vous avez référencé. La première fois que cela m'est arrivé pendant que je déboguais, ce fut une révélation.

Le problème principal auquel vous êtes confronté est de vous assurer que le code extrait pour le package dépendant représente la même version que votre référence NuGet dans le projet principal. Pas de problème si vous suivez une politique de toujours construire avec la version la plus récente de votre package.

Un autre avantage de cette approche est que si le package doit changer, vous pouvez effectuer la modification sur place.


2
Pouvez-vous fournir des détails supplémentaires sur la manière dont cela fonctionne? Cela ne fonctionne pas comme vous me l'avez décrit. Avez-vous besoin d'inclure des PDB dans le package? Des astuces supplémentaires?
Dyppl

-1

Vous pouvez peut-être utiliser https://github.com/GitTools/GitLink . Il ajoute un lien dans le fichier pdb pointant vers le référentiel afin que Visual Studio récupère le code source à partir de là - et il vous suffit ensuite d'inclure le fichier pdb dans votre package nuspec et n'aurez pas besoin d'un serveur source.


1
Est-ce que cela fonctionne en dehors du débogage? Cela ne ressemble pas à ça.
Dyppl

-1

Ce n'est donc pas une solution parfaite, mais vous mentionnez que vous pouvez éventuellement utiliser Resharper; avec dotPeek et resharper, vous pouvez accéder au démontage du code d'origine, c'est ce que j'utilise au travail, où nous avons une configuration similaire à la vôtre.

Je trouve une combinaison du Symbol Server que vous avez mentionné et parcourir le démontage est normalement suffisant pour comprendre ce qui se passe.

J'espère que cela pourra aider.

Edit: Après avoir relu votre question, je me rends compte que vous demandez spécifiquement de pouvoir parcourir le code source, ce qui n'est pas le cas. Espérons néanmoins que ce sera utile à quelqu'un.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.