50 votes

Construire un seul projet dans une solution à partir de la ligne de commande

J'ai une solution avec de nombreux dossiers de solution contenant de nombreux projets c#.

Comment puis-je construire/reconstruire un seul de ces projets à partir de la ligne de commande ?

Je suppose qu'il y a un moyen de le faire en utilisant msbuild mais je ne connais rien à msbuild.

Merci !

0 votes

Quelque chose comme "msbuild TargetProj.csproj /t:rebuild"

3 votes

Avertissement : la réponse acceptée et le commentaire ci-dessus est une réponse dangereuse. Elle ne tient pas compte des dépendances de la solution ou de tout ciblage qui repose sur le chargement de la solution, même si le but était de ne construire qu'un seul projet. Ne le faites que si vous savez que vous pouvez isoler en toute sécurité votre flux de construction pour un projet vraiment atomique.

119voto

C Johnson Points 4900

Vous disposez d'un fichier de solution contenant des projets, et vous voulez construire/reconstruire un projet.

Cette page Web sur MSDN énumère exactement ce que vous devez faire :

http://msdn.microsoft.com/en-us/library/ms171486.aspx

Donc, étant donné un fichier de solution mysolution.sln avec des projets :

  • foo.vcxproj
  • bar.vcxproj
  • baz.vcxproj

où ils dépendent tous les uns des autres, de bas en haut. Ainsi que baz est le plus indépendant, bar dépend de baz y foo dépend de bar .

Si vous voulez construire foo alors vous le faites :

MSBuild mysolution.sln /target:foo

Les autres réponses ne tenaient pas compte des dépendances. Bien sûr, msbuild.exe va construire un seul fichier de projet (i.e. foo.vcxproj), mais il échouera si bar et baz ne sont pas encore construits. Afin de construire plusieurs projets et d'obtenir les projets indépendants construits, vous devez d'abord passer dans le fichier de solution (après tout, le PO a mentionné que cela faisait partie d'un fichier de solution). Ensuite, passez le nom du projet et une cible délimitée par un deux-points.

MSBuild mysolution.sln /target:foo:Rebuild

Grosse supposition ici. Je suppose que le nom du projet $(ProjectName) correspond à celui du fichier.

Edit (de commentaire ) : Si vous avez des points (.) dans le nom du projet, vous devrez les remplacer par un trait de soulignement (_).

1 votes

+1 pour la réponse, et cela semble bien fonctionner. Cependant, je viens d'essayer ce scénario, avec une dépendance reposant sur une autre dépendance, et en exécutant msbuild contre le seul projet auquel je tenais qui fonctionne encore correctement. Apparemment, msbuild est assez intelligent pour construire les dépendances dans l'ordre. Donc les deux solutions fonctionnent aussi bien l'une que l'autre d'après ce que je peux dire.

18 votes

En outre, si le projet se trouve dans un dossier de solution, vous devez le spécifier dans le nom de la cible, comme suit /target:myfolder\foo

35 votes

Si vous avez des points (.) dans le nom du projet, vous devrez les remplacer par un trait de soulignement (_). Une fois de plus, la documentation de MS fait cruellement défaut.

27voto

Joe Enos Points 17442

Vous pouvez simplement appeler msbuild et passez-lui le fichier de projet .csproj/.vbproj que vous voulez construire, et il ne fera que celui-là.

Donc quelque chose comme :

cd \MySolution
msbuild .\Project1\Project1.csproj

2 votes

J'ai essayé et j'obtiens : erreur MSB4019 : Le projet importé " C:\Windows\Microsoft.NET\Framework\v3.5\Workflow.Targets " n'a pas été trouvé. Confirmez que le chemin dans la déclaration <Import> est correct, et que le fichier existe sur le disque.

1 votes

Utilisez-vous la bonne version de msbuild ? Assurez-vous que vous ouvrez l'invite de commande de Visual Studio 2010, afin qu'il n'utilise pas un ancien constructeur .NET Framework. Si ce n'est pas le problème, alors il pourrait y avoir un problème avec l'installation du Workflow lui-même, et je ne saurais pas où aller à partir de là.

0 votes

C'est ça ! Je fonctionnais à partir de Windows Command Prompt qui apparemment exécute une autre version de msbuild installée. Comment puis-je trouver la bonne version de msbuild.exe que je dois exécuter ? Parce que je veux créer une compilation .bat et l'exécuter à partir de Windows Command Prompt (pas VS2010 Command Prompt). Note : la raison de ceci est que c'est une solution énorme et je veux seulement construire un couple de projets dans le cadre d'un déploiement script (pour déployer à un environnement QA à partir de mon poste de travail de développement).

5voto

Bernard Points 5492

Vous pouvez consulter este pour en savoir plus sur l'utilisation de MSBuild à partir de la ligne de commande. Voici un exemple de ce dont vous avez besoin :

MSBuild.exe MyProject.proj /t:rebuild

0 votes

J'ai essayé et j'obtiens : error MSB4019 : The imported project " C:\Windows\Microsoft.NET\Framework\v3.5\Workflow.Targets "n'a pas été trouvé. Confirmez que le chemin d'accès dans la déclaration <Import> est correct et que le fichier existe sur le disque.

2 votes

Ce n'est que la moitié de l'histoire. Le PO a parlé d'un projet dans un fichier de solution. Un fichier de solution peut lister des dépendances supplémentaires qui doivent être construites en premier. Si vous construisez à partir de zéro et qu'aucune de ces dépendances n'existe encore, la construction peut échouer.

1voto

freshprinze Points 124

Affichage à titre d'information pour les futurs demandeurs

set MSBuildEmitSolution=1

https://stackoverflow.com/a/40372894/826862

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