144 votes

spécifier le fichier de projet d'une solution en utilisant msbuild

Je veux la ligne de commande pour construire un projet particulier d'une solution en utilisant msbuild comme nous le faisons avec devenv.com.dans devenv.com nous pouvons spécifier un projet d'une solution utilisant la ligne de commande suivante

devenv.com /Build Release|x86 test.sln /project "testproject"

En utilisant la ligne de commande ci-dessus, je peux construire le projet de test dans le test.sln en utilisant devenv.com. Quelle est la ligne de commande pour msbuild pour la même solution.

Merci

248voto

Easton L. Points 2564
msbuild test.sln /t:project /p:Configuration="Release" /p:Platform="x86" /p:BuildProjectReferences=false

Remarquez que ce qui est assigné à /t est le nom du projet dans la solution, il peut être différent du nom du fichier du projet.

En outre, comme indiqué dans Comment : Construire des cibles spécifiques dans des solutions en utilisant MSBuild.exe :

Si le nom du projet contient l'un des caractères suivants % , $ , @ , ; , . , ( , ) ou ' remplacez-les par un _ dans le nom de la cible spécifiée.

Vous pouvez également construire plusieurs projets à la fois :

msbuild test.sln /t:project;project2 /p:Configuration="Release" /p:Platform="x86" /p:BuildProjectReferences=false

Pour reconstruire ou nettoyer, changer /t:project à /t:project:clean ou /t:project:rebuild

24voto

Mark Smith Points 673

MSBuild fonctionne en fait par l'utilisation de projets et non par la solution. La solution est seulement utilisée pour l'analyser dans un fichier de projet temporaire dans MSBuild en interne. Vous devriez être en mesure de construire le projet qui vous intéresse directement à travers MSBuild en exécutant la commande suivante.

"msbuild testproject /p:Configuration=Release /p:Platform=x86"

Il y a un problème majeur que vous pourriez rencontrer en utilisant le projet directement au lieu de la solution : si vous utilisez la solution pour exprimer les dépendances entre les projets, au lieu d'ajouter les références au projet et de laisser le système de construction travailler sur les dépendances automatiquement.

Si vous imposez un ordre de construction en utilisant le fichier sln, je recommande de travailler ces dépendances directement dans les fichiers proj et de les supprimer du sln. Cela vous permettra d'invoquer n'importe quel fichier proj à partir de MSBuild directement et les projets seront tous construits indépendamment sans aucun travail supplémentaire. Vous devriez vraiment traiter le fichier sln comme un groupe de projets pour faciliter le travail dans Visual Studio et non comme une entrée de construction.

9voto

freshprinze Points 124

Affichage à titre d'information pour les futurs demandeurs

Ajoutez ce qui suit au script de la compilation et exécutez-le une fois. Cela générera les cibles exactes et autres informations que msbuild utilisera réellement.

Ex : Si vous avez . dans le nom ou les dossiers du projet, msbuild s'attendra à ce que _ à la place de la . .

set MSBuildEmitSolution=1

Après avoir obtenu les informations, mettez à jour le build script avec les détails requis.

8voto

kayleeFrye_onDeck Points 3244

Pour ce faire, vous devez savoir ce que le projet doit faire. nom de la cible est, pas nécessairement le nom du projet.

Une façon de le découvrir est d'utiliser MSBuild contre votre SLN avec les paramètres prévus après avoir défini une variable d'environnement spéciale appelée MSBuildEmitSolution à la valeur de 1 .

set MSBuildEmitSolution=1
msbuild my_stuff.sln /t:rebuild /p:Configuration=Release /p:Platform=x64

J'ai récemment dû le faire en raison d'un nom très spécifique pour une cible dans des répertoires imbriqués. Donc, à partir de mon fichier généré, my_stuff.sln.metaproj J'ai trouvé cette ligne :

<Target Name="Utils\Firewall\FirewallUtils:Rebuild">

Cela signifie que la ligne de commande à utiliser finit par être,

msbuild my_stuff.sln /t:Utils\Firewall\FirewallUtils:Rebuild /p:Configuration=Release /p:Platform=x64

2voto

C J Points 101

Juste pour ajouter des informations supplémentaires, l'exécution de msbuild dans le dossier du projet construira par défaut le fichier du projet puisque c'est le seul qui s'y trouve.

>msbuild

Il existe de nombreuses variantes de l'utilisation de msbuild de cette manière. Vous pouvez spécifier le fichier proj directement.

>msbuild helloworld.csproj -t:Build.

Consultez la documentation de msbuild pour l'utilisation, les exigences du fichier projet, ainsi que les avantages de construire le projet au lieu de la solution.

Documentation sur MSBuild

Il y a des avantages à construire de cette façon, comme l'a mentionné Mark-Smith ci-dessus.

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