2010-11-22 12 views
3

Je tente d'écrire une compilation automatisée pour l'un de nos produits, et je me suis heurté à un mur pour certains de nos projets VC++: je dois pouvoir définir la sortie chemin vers où les assemblages seront copiés une fois fait.Tâche VCBuild dans MSBuild - change outputpath

Voici un fichier msbuild de fortune:

<Project DefaultTargets="Build" 
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
     ToolsVersion="3.5"> 
<Target Name="Build"> 
    <VCBuild Projects="C:\src\SomeProject\SomeProject.vcproj" 
      ToolPath="C:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages" 
      Configuration="Debug" /> 
</Target> 
</Project> 





Stijn s Réponse:

Je pensais utiliser cet espace pour clarifier la façon dont j'ai personnellement utilisé Stijn de répondre pour résoudre ceci. Il a du code dans son fichier MSBuild qui écrit le fichier vsprops pour lui. J'ai décidé d'adopter une approche plus simple et d'écrire le fichier manuellement.

J'ai créé ce fichier, appelé build.vsprops (mon chemin de sortie est V :)

<?xml version="1.0"?> 
<VisualStudioPropertySheet ProjectType="Visual C++" 
          Version="8.00" 
          Name="Overrides" 
          OutputDirectory="V:\"> 
    <Tool Name="VCCLCompilerTool" 
     AdditionalUsingDirectories="V:\" /> 
</VisualStudioPropertySheet> 

J'édité mon fichier MSBuild pour ajouter le paramètre Priorité:

<Project DefaultTargets="Build" 
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
     ToolsVersion="3.5"> 
<Target Name="Build"> 
    <VCBuild Projects="C:\src\SomeProject\SomeProject.vcproj" 
      ToolPath="C:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages" 
      Configuration="Debug" 
      Override="$(MSBuildProjectDirectory)\build.vsprops" /> 
</Target> 
</Project> 

Répondre

2

regardez le paramètre Override pour VCBuild task. Fondamentalement, vous spécifiez une feuille de propriétés que vous pouvez utiliser pour remplacer n'importe quelle propriété que vous voulez (cela a le même effet que l'ajout d'une feuille de propriétés en haut de la liste dans un projet dans VS). Vous pouvez même générer le fichier de remplacement à l'aide de la tâche WriteLinesToFile.

Exemple:

<PropertyGroup> 
    <VCOverridesFile Condition=" '$(VCOverridesFile)'=='' ">overrides.vsprops</VCOverridesFile> 
    <VCOverridesOpen>%3C?xml version=%221.0%22?%3E%0D%0A%3CVisualStudioPropertySheet ProjectType=%22Visual C++%22 Version=%228.00%22 Name=%22My Overrides%22%3E</VCOverridesOpen> 
    <VCOverridesClose>%3C/VisualStudioPropertySheet%3E</VCOverridesClose> 
    <MyOutPath>&lt;Tool Name="VCLinkerTool" OutputFile ="c:\my.exe"/&gt;</MyOutPath> 
</PropertyGroup> 

<Target Name="WriteOverridesFile"> 
    <WriteLinesToFile 
    File="$(VCOverridesFile)" 
    Lines="$(VCOverridesOpen);$(AdditionalVCOverrides);$(VCOverridesClose)" 
    Overwrite="true" /> 
</Target> 

Passez ensuite $ (VCOverridesFile) à la propriété Override et assurez-vous que votre VCBuild Tâche DependsOnTarget WriteOverridesFile.

0

Le faire la manière sale, vous pouvez passer le chemin du répertoire de sortie à travers les arguments de la ligne de commande de msbuild.

msbuild yourProject /p:OutDir=yourPath 

Bien que je soupçonne, il devrait y avoir le meilleur moyen d'accomplir la tâche. L'idée principale est de définir la propriété 'OutDir' de telle sorte qu'elle ne soit pas annulée par votre SomeProject.vcproj

+4

Cela ne fonctionne pas pour les tâches VCBuild – csauve