web-dev-qa-db-fra.com

Comment relier plusieurs solutions Visual Studio ensemble?

J'ai 3 solutions et la solution A nécessite des versions construites des DLL de la solution B et C afin de compiler. il n'est pas possible de le fusionner pour une solution ...

Jusqu'à présent, il semble que Visual Studio ne prenne pas en charge les références de solution et que msbuild est suffisamment intelligent pour savoir que vous générez une solution à partir d'une autre, etc., si j'essaie de cette façon. L’objectif général est d’essayer de donner l’apparence des solutions multiples comme s’il n’y en avait qu’une - la solution A.

Je crois que c’est un problème courant, mais comment le relier correctement? 

39
Simon P

Cette question a surgi sous des formes différentes , mais liées ,. En fait, il existe une page MSDN qui couvre cette .

Vous recherchez une approche multi-solutions semblable au modèle Solution unique partitionnée pour systèmes plus grands. Ayez une solution "tout" qui construit tout et maintient vos dépendances entre composants. C’est ce que vous construisez lorsque vous avez besoin de générer la solution A. Vous disposez alors de solutions distinctes qui incluent uniquement les composants B ou C. Vous aurez toujours trois solutions, mais vous ajouterez les projets des solutions B et C dans la solution UNE.

29
Greg D

J'ai récemment découvert que dans Visual Studio 2008, vous pouvez inclure des projets existants dans plusieurs solutions. Jusqu'à présent, le seul inconvénient semble être que si vous modifiez un projet partagé et que plusieurs solutions ouvertes utilisant ce projet partagé sont ouvertes, il vous sera demandé de "recharger" les autres solutions.

Il suffit donc d’ajouter «Projet existant» à toutes les solutions nécessitant ce projet. J'utilise TFS sur mon site actuel et il semble n'y avoir aucun problème avec l'éther de contrôle de code source.

4
Paul Redman

Je pense que cela devrait être au niveau du projet que vous regardez. Générez les projets contenus dans les solutions B et C, puis ajoutez des références aux DLL des projets correspondants dans la solution A. 

Dans Msbuild si vous avez un groupe de propriétés 

<PropertyGroup>

<SolutionsToBuild>SolutionB</SolutionsToBuild>
<SolutionsToBuild>SolutionC</SolutionsToBuild>
<SolutionsToBuild>SolutionA</SolutionsToBuild>
</PropertyGroup>

Puis exécutez la tâche MSBuild 

<MSBuild Projects="@(SolutionsToBuild)"/>

J'espère que cela t'aides

3
Dean

Vous pouvez essayer d'automatiser le processus de fusion pour gagner du temps: http://code.google.com/p/merge-solutions/

Bien que nous ayons un problème légèrement différent: environ 15 solutions (~ 150 projets au total) qui utilisaient une bibliothèque commune. Le problème était que si nous essayions de les fusionner en un seul afin de refactoriser/exterminer le code redondant de la bibliothèque commune . 1. La fusion de 15 solutions implique beaucoup de clics et d’attente dans VS 2. La solution résultante n’a jamais été à jour - personne n’a pris la peine de la mettre à jour en raison de sa taille.

1
bushed

Vous pouvez ajouter un projet Makefile à la solution A qui construirait vos solutions B et C (en utilisant msbuild par exemple) et rendrait tous les projets de A dépendants de ce projet Makefile. De cette façon, vous ne pourrez pas ajouter de références de projet aux projets en B et C, mais vous pouvez utiliser des références DLL et elles seront toujours construites à partir des sources les plus récentes.

0
Juozas Kontvainis

Vous pouvez essayer d'ajouter des commandes de construction en ligne de commande pour les dll (dans les solutions B et C) dont vous dépendez dans les événements de pré-construction de vos projets (dans la solution A).

0
Brann

Si vous ne pouvez pas placer les projets B et C dans la même solution que le projet A, il n’ya aucun moyen de vous assurer que vous avez des fichiers binaires pour B et C contenant le code source le plus récent lors de la génération du projet A.

La solution la plus simple que j'ai vue consiste à créer un dossier commun dans le référentiel de code source, dans lequel chaque projet copie ses fichiers binaires s'ils doivent être partagés. Tous les autres projets peuvent ensuite référencer des fichiers binaires dans ce dossier tant que vos dossiers locaux ont la même apparence que le référentiel.

Pas une solution parfaite, mais c'est assez facile de travailler avec.

0
user16324

Selon cette réponse , je vous recommanderais de créer votre propre fichier de traitement par lots} _ qui construira les solutions appropriées pour vous.

C'est très pratique à utiliser car le processus de génération va générer la progression de la construction (similaire à la fenêtre de sortie dans Visual Studio) à la commande Promed pour chaque génération exécutée.

De plus, dans le cas où vous avez besoin de créer une solution avant l’autre, vous pouvez écrire votre propre ordre de construction, par exemple:

  1. construire la solution B
  2. construire la solution C
  3. construire la solution A (qui utilise en interne les fichiers construits "solution B" et "solution C")

J'ai rapidement écrit un script pour clarifier l'ordre de construction mentionné ci-dessus et prendre en charge la plupart des versions modernes de Visual Studio.

Cordialement.

0
Eido95