web-dev-qa-db-fra.com

spécifier le fichier de projet d'une solution à l'aide de msbuild

Je veux la ligne de commande pour construire un projet particulier d'une solution à l'aide de msbuild, comme nous le faisons avec devenv.com.In devenv.com, nous pouvons spécifier un projet d'une solution à l'aide de 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 testproject dans le test.sln à l’aide de devenv.com.What est la ligne de commande de msbuild pour la même solution.

Merci

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

Notez 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 Procédure: créer des cibles spécifiques dans des solutions à l'aide de MSBuild.exe :

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

Vous pouvez également créer plusieurs projets à la fois:

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

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

172
Easton L.

MSBuild fonctionne réellement à travers l’utilisation de projets et non la solution. La solution est uniquement utilisée pour l’analyser dans un fichier de projet temporaire dans MSBuild en interne. Vous devriez pouvoir construire le projet d’intérêt directement via MSBuild en exécutant la commande suivante.

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

Je sais que vous pouvez rencontrer un problème majeur: utilisez directement le projet au lieu de la solution: si vous utilisez la solution pour exprimer des dépendances entre les projets, au lieu d’ajouter les références au projet et de laisser le système de construction résoudre automatiquement les dépendances. .

Si vous appliquez un ordre de construction en utilisant le fichier sln, je vous recommande d’utiliser ces dépendances directement dans les fichiers proj et de les supprimer du sln. Cela vous permettra d’invoquer directement n’importe quel fichier proj de MSBuild et les projets seront tous construits indépendamment sans aucun travail supplémentaire. Vous devez 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.

14
Mark Smith

Publier comme information pour les futurs demandeurs

Ajoutez ce qui suit au script de construction 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 du projet ou dans les dossiers que msbuild attendra _ à la place du ..

set MSBuildEmitSolution=1

Après avoir obtenu les informations, mettez à jour le script de génération avec les détails requis.

7
freshprinze

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 car il est le seul présent.

>msbuild

Il existe de nombreuses variantes d'utilisation de msbuild de cette façon. Vous pouvez spécifier le fichier proj directement.

>msbuild helloworld.csproj -t:Build.

Examinez la documentation de msbuild pour l’utilisation, les exigences du fichier proj, ainsi que les avantages de la génération du projet plutôt que de la solution.

Documentation MS MSBuild

Il y a des avantages à construire de cette manière, comme mentionné par Mark-Smith ci-dessus.

1
C J

Pour ce faire, vous devez savoir quel est le nom du projet target , mais pas nécessairement le nom du projet.

Une façon de le savoir consiste à utiliser MSBuild sur votre SLN avec les paramètres souhaités après avoir défini une variable d’environnement spéciale appelée MSBuildEmitSolution sur 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
0
kayleeFrye_onDeck