J'ai une tâche Msbuild pour créer un projet spécifique dans un fichier de solution. Cela ressemble à quelque chose comme ça:
<Target Name="Baz">
<MSBuild Projects="Foo.sln" Targets="bar:$(BuildCmd)" />
</Target>
De la ligne de commande, je peux définir mon BuildCmd
sur Rebuild
ou Clean
et cela fonctionne comme prévu:
msbuild/Target: Baz/Propriété: BuildCMD = Recuilild MyMSBuildFile.xml Msbuild/Target: Baz/Propriété: BuildCMD = Clean MyMsBuildFile.xml
Mais quel mot dois-je utiliser pour définir BuildCmd
pour simplement construire? J'ai essayé Build
et Compile
et juste le laisser vide ou indéfini, mais j'ai toujours une erreur.
msBuild/Target: Baz/Propriété: BuildCMD = Build MyMSBUILDFILE.XML FOO.SLN: Erreur MSB4057: La cible "Barre: Build" n'existe pas dans le projet.
msbuild/Target: Baz/Propriété: BuildCMD = Compiler MyMSBUILDFILE.XML FOO.SLN: Erreur MSB4057: La cible "Barre: Compiler" n'existe pas dans le projet.
msBuild/Target: Baz MyMSBUILDFILE.XML FOO.SLN: Erreur MSB4057: La cible "barre:" n'existe pas dans le projet.
J'ai compris que vous souhaitez construire une cible avec une commande spécifique: Construire, nettoyer, etc.
C'est comme ça que je le ferais.
Créez une propriété pour recevoir votre commande Build, lorsqu'il n'est pas spécifié par défaut de construire
<PropertyGroup>
<BuildCmd Condition=" '$(BuildCmd)' == ''">Build</BuildCmd>
</PropertyGroup>
Après, créez la cible qui démarrera Msbuild avec la cible spécifiée dans le paramètre:
<Target Name="Stackoverflow">
<MsBuild Projects="Foo.sln" Targets="$(BuildCmd)" />
</Target>
Appelez ensuite votre fichier MSBuild avec le paramètre cible et BuildCMD, comme vous le souhaitez:
msbuild msbuild.xml /t:Stackoverflow /p:BuildCmd=Clean
Assurez-vous simplement que la cible existe dans la solution ou le fichier de projet.
De: http://msdn.microsoft.com/en-us/library/ms164311.aspx
/ cible: cibles
Construit ces objectifs dans ce projet. Utilisez un point-virgule ou une virgule pour séparer plusieurs cibles ou spécifier chaque cible séparément./T est également acceptable. Par exemple:/cible: ressources; Compiler
La clé est conditionnalisée à la propriété BuildCMD.
<Target Name="Baz">
<PropertyGroup>
<BuildCmd Condition="'$(BuildCmd)' != ''">:$(BuildCmd)</BuildCmd>
</PropertyGroup>
<MSBuild Projects="Foo.sln" Targets="bar$(BuildCmd)" />
</Target>
De cette façon, si propre ou reconstruit est défini, le côlon est ajouté. Si rien n'est ajouté, BuildCMD sera simplement vide, défaut de la cible de construction.
Remarque - Le groupe de propriétés doit résider dans la cible ou sera remplacé lorsque vous le spécifiez sur la ligne de commande.
Utilisation du modèle de Chegueverra, j'ai proposé la solution suivante:
<PropertyGroup>
<ProjBuildCmd Condition="'$(BuildCmd)' != 'Build'">:$(BuildCmd)</ProjBuildCmd>
<SolnBuildCmd Condition="'$(BuildCmd)' != 'Build'">$(BuildCmd)</SolnBuildCmd>
</PropertyGroup>
Et puis au lieu d'utiliser $(BuildCmd)
directement, j'utilise $(ProjBuildCmd)
ou $(SolnBuildCmd)
comme ceci:
<!-- Build the 'bar' project only -->
<Target Name="Baz">
<MSBuild Projects="Foo.sln" Targets="bar$(ProjBuildCmd)" />
</Target>
<!-- Build the whole solution -->
<Target Name="Baz2">
<MSBuild Projects="Foo.sln" Targets="$(SolnBuildCmd)" />
</Target>