Question

Je tente d'écrire une génération automatisée pour l'un de nos produits, et je l'ai frappé contre un mur pour certains de nos projets VC ++: Je dois être en mesure de définir le chemin de sortie à l'endroit où les assemblées seront copié une fois son fait.

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>





Réponse de Stijn:

Je pensais utiliser cet espace pour clarifier la façon dont j'ai personnellement utilisé la réponse de Stijn pour résoudre ce problème. Il a un code dans son dossier MSBuild qui écrit le fichier vsprops pour lui. J'ai décidé d'adopter une approche plus simple et il suffit 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>
Était-ce utile?

La solution

ont un regard sur le paramètre Override pour le VCBuild tâche . Fondamentalement, vous spécifiez une feuille de propriétés que vous pouvez utiliser pour remplacer ce que la propriété que vous voulez (il 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 en utilisant 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.

Autres conseils

Le faire le chemin de sale, vous pouvez passer le chemin du répertoire de sortie par les arguments de ligne de commande de msbuild.

msbuild yourProject /p:OutDir=yourPath

Bien que je soupçonne, il devrait être la meilleure façon d'accomplir la tâche. L'idée principale est de définir la propriété « OutDir » de manière à ce que ce ne sera pas surchargée par votre SomeProject.vcproj

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top