51 votes

Comment lier plusieurs solutions Visual Studio entre elles ?

J'ai 3 solutions et la solution A nécessite des versions construites des DLLs de la solution B et C afin de compiler. Il n'est pas possible de la fusionner en une seule solution...

Jusqu'à présent, il semble que Visual Studio ne supporte pas les références de solutions et que msbuild est suffisamment intelligent pour savoir que vous construisez une solution à partir d'une autre, etc. si j'essaie de cette manière. L'objectif global est d'essayer de faire en sorte que les multiples solutions semblent presque comme s'il n'y en avait qu'une seule - juste la solution A.

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

0 votes

Pourquoi ne pouvez-vous pas les fusionner en une seule solution ?

0 votes

Aussi, pourquoi n'utilisez-vous pas msbuild ?

5 votes

Nous ne pouvons pas le mettre dans une seule solution car le B et le C sont utilisés dans plus que le A. pendant le dev, il est construit comme vs build ; si msbuild fonctionne mieux, dites-nous comment !

0voto

Brann Points 9983

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

0voto

Si vous ne pouvez pas mettre les projets B et C dans la même solution que le projet A, il n'y a aucun moyen de s'assurer que vous avez des binaires pour B et C contenant le dernier code source lorsque vous construisez le projet A.

La solution la plus simple que j'ai vue est d'avoir un dossier commun dans le dépôt de code source où chaque projet copie ses binaires s'ils doivent être partagés. Ensuite, tous les autres projets peuvent référencer les binaires dans ce dossier tant que vos dossiers locaux ont la même apparence que le dépôt.

Ce n'est pas une solution parfaite, mais elle est assez facile à utiliser.

0voto

Juozas Kontvainis Points 3294

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 serez pas en mesure d'ajouter des références de projet aux projets B et C, mais vous pouvez utiliser des références de dll et ils seront toujours construits à partir des dernières sources.

0voto

Eido95 Points 1128

Selon cette réponse je vous recommande de créer votre propre fichier batch qui élaborera les solutions pertinentes pour vous.

C'est très pratique à utiliser parce que le processus de construction produira la progression de la construction (similaire à la fenêtre de sortie dans Visual Studio) à la promotion de la commande pour chaque exécution de la construction.

De plus, dans le cas où vous devez construire 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 script pour clarifier l'ordre de construction mentionné ci-dessus et prennent en charge la plupart des versions modernes de Visual Studio.

Regards.

0voto

Yitzhak Weinberg Points 806

J'ai résolu le problème en mettant le script dans la ligne de commande de l'événement de pré-construction et si le projet A ne parvient pas à se construire, je lance une alerte msg.

ECHO "build A project"
set AppMsg ="%SystemRoot%\System32\msg.exe"
set AppMsg
if not "%ProgramFiles(x86)%" == "" (
if exist "%SystemRoot%\Sysnative\*" set AppMsg="%SystemRoot%\Sysnative\msg.exe"
)
set AppMsg
taskkill /f /im "%PROGRAMFILES(X86)%\MSBuild\14.0\Bin\msbuild" "$(SolutionPath)" /t:Project_A_Name /p:Configuration=Debug;TargetFrameworkVersion=v4.5 /p:Platform="Any CPU" /p:BuildProjectReferences=false /p:VSToolsPath="%PROGRAMFILES(X86)%\MSBuild\Microsoft\VisualStudio\v14.0" 2>nul 1>nul
echo ERRORLEVEL %ERRORLEVEL%
if ERRORLEVEL 1 (
ECHO "failed to build test project"
%AppMsg% * "failed to build test project"
)
exit 0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X