12

Où stocker les binaires requis pour les versions automatiques sur Team System? Les stockez-vous avec le code dans le SCM ou ailleurs? Avoir une grande quantité de binaires dans SCM causant des problèmes de performance avec la source controol?Existe-t-il une alternative .NET pour les référentiels d'artefacts Java tels que Nexus ou Artifactory? Où stockez-vous les DLL versionnées?

Il est nécessaire de pouvoir revenir à une version antérieure d'une bibliothèque externe afin de corriger les bogues dans la version publiée, mais les versions ne sont pas compatibles. Branching ferait l'affaire, mais je pense que stocker des binaires avec le code est anti-pattern.

Toutes les suggestions sont les bienvenues.

+0

Le projet Refix mentionné par @David M stocke les versions de chaque assemblage. –

Répondre

0

Nous avons toujours stocké des dépendances binaires externes avec le code source, les images, les scripts de construction et tous les autres artefacts nécessaires pour construire une solution ensemble dans le système de contrôle de version (VCS). C'est ce qu'un VCS est vraiment bon, et cela nous assure que nous avons la version appropriée de tous les artefacts nécessaires disponibles pour n'importe quelle version de notre build, même les branches.

Je suis curieux: pourquoi considèreriez-vous cela comme un anti-pattern?

+3

De plus en plus, les équipes passent à DVCS (par exemple, Git, Mercurial), où chaque utilisateur a l'intégralité de l'historique des pensions localement. Si vous avez une construction qui dépend de binaires volumineux ou souvent changeants, ceci est un anti-pattern car il oblige chaque repo à avoir des * copies * locales de chaque binaire jamais utilisées (même * transitivement * utilisées!) Au lieu de * références * aux dépendances directes. Cela peut être considéré comme un anti-modèle s'il décourage les équipes de casser leur base de code dans des composants autrement logiquement indépendants hébergés dans des repos distincts. – Mickalot

+1

Dans les 4 ans depuis cette réponse Git et NuGet a été introduit. Ces deux outils combinés créent une meilleure gestion des dépendances et un meilleur historique des dépendances que les dépôts centralisés d'antan. Je suis entièrement d'accord que mon approche originale ne devrait pas être utilisée si vous avez ce genre d'outils disponibles. –

0

Subversion a par exemple le svn:externals qui pourrait être utilisé pour importer le contenu d'un autre répertoire avec vos bibliothèques. L'externe peut être épinglé à une révision spécifique. Pour moi c'est un meilleur moyen et vous évitez copies de travail imbriquées.

1

J'ai toujours utilisé svn: externals pour cela dans le passé, comme décrit par cringe. Mais il est lent à mettre à jour dans une copie de travail locale. J'ai lancé un projet open source avec un couple d'amis pour essayer de résoudre ce problème, qui est encore à un stade très précoce, mais si c'est un problème qui vous intéresse, vous voudrez peut-être garder un œil dessus (ou même aider avec). Il s'appelle Refix et est hosted on CodePlex.

0

(je sais que c'est une vieille question, mais mon équipe typiquement basé sur Java-est en train de faire un peu de travail .NET et poser les mêmes questions en ce moment, et voici ce que nous avons trouvé.)

Si vous utilisez un système DVCS comme Git, vous avez tout à fait raison de constater que vous pouvez rencontrer des problèmes de performance si vous vérifiez ces bibliothèques dans le contrôle de source. À titre de référence, nous avons effectué la transition de plusieurs grands projets (2 à 5 Go) avec des binaires enregistrés de Perforce vers Git. La performance des dépôts Git importés (en utilisant Git 1.9 sur des boîtes Windows puissantes utilisant des disques SSD) était inadéquatement lente pour le développement. Nous avons peaufiné notre build pour tirer la plupart de ces dépendances d'une instance Nexus privée, et les repos significativement plus minces (50-200 Mo de source) semblent bien fonctionner.

Si vous avez déjà une instance Nexus à votre disposition, rien ne vous empêche de l'utiliser pour stocker des artefacts .NET - en ce qui concerne Nexus, un artefact est juste un fichier. Si vous compressez vos fichiers DLL et fichiers de configuration et n'importe quoi dans un seul fichier, Nexus est heureux d'héberger cela comme artefact versionné, et vous pouvez le télécharger/décompresser au bon endroit quand vous en avez besoin. (Je n'ai pas utilisé Artifactory, donc je ne peux pas commenter ce qu'il fait.)

Si vous voulez quelque chose qui s'intègre spécifiquement avec VisualStudio (ou MonoDevelop), alors NuGet semble être la réponse émergente maintenant.

Par défaut, il y a un flux NuGet central sans restriction d'accès à la lecture.Pour l'hébergement, il semble que vous pouvez soumettre des binaires OSS/public à héberger là-bas, et si vous voulez héberger des binaires propriétaires/privés, il y a instructions for setting up your own private NuGet feed.

Si vous avez la version Pro de Nexus, it claims to host .NET artifacts and allow access through NuGet, mais je n'ai aucune expérience de l'utiliser.

3

Nexus et Artifactory prennent actuellement en charge le stockage des artefacts binaires et des dépendances utilisés dans le développement .net. Pour la construction TFS et l'intégration à Visual Studio en utilisant des paquets NuGet, vous pouvez consulter this blog.

+1

Le lien du blog est maintenant http://www.jfrog.com/continuous-integration-using-tfs-nuget-artifactory/ – Jason