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
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
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.
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.
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.
Il y a des avantages à construire de cette manière, comme mentionné par Mark-Smith ci-dessus.
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