Domanda

Sto cercando di scrivere una build automatizzato per uno dei nostri prodotti, e ho colpito contro un muro per alcuni dei nostri progetti di VC ++: ho bisogno di essere in grado di impostare il percorso di uscita a dove saranno le assemblee copiato una volta il suo fare.

Ecco un file msbuild improvvisato:

<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>





Risposta di Stijn:

ho pensato di usare questo spazio per chiarire come ho usato personalmente la risposta di Stijn per risolvere questo. Ha un po 'di codice nel suo fascicolo MSBuild che scrive il file vsprops per lui. Ho deciso di adottare un approccio più semplice e basta scrivere il file manualmente.

Ho creato questo file, chiamati build.vsprops (il mio percorso di uscita è V:)

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

Poi ho modificato il mio file MSBuild per aggiungere il parametro Override:

<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>
È stato utile?

Soluzione

dare un'occhiata al parametro Sostituisci per il VCBuild compito . In sostanza si specifica una finestra delle proprietà che è possibile utilizzare per sovrascrivere qualunque proprietà che si desidera (che ha lo stesso effetto come l'aggiunta di una finestra delle proprietà in cima alla lista in un progetto all'interno di VS). Si potrebbe anche generare il file di override utilizzando l'attività WriteLinesToFile.

Esempio:

<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>

Poi passare $ (VCOverridesFile) per la proprietà Override e assicurarsi che il VCBuild Task DependsOnTarget WriteOverridesFile.

Altri suggerimenti

Facendo in modo sporco è possibile passare il percorso della directory di output attraverso gli argomenti della riga di comando di msbuild.

msbuild yourProject /p:OutDir=yourPath

Anche se ho il sospetto, non ci dovrebbe essere il modo migliore per realizzare il compito. L'idea principale è quella di insieme di proprietà 'OutDir' in tal modo un che non essere sovrascritte dal vostro SomeProject.vcproj

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top