Pregunta

Estoy intentando escribir una construcción automatizado para uno de nuestros productos, y he golpeado contra una pared para algunos de nuestros proyectos de VC ++: Tengo que ser capaz de establecer la ruta de salida al lugar donde serán las asambleas copiado una vez que se hace.

Aquí es un archivo msbuild de expediente:

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





respuesta de Stijn:

pensé que haría uso de este espacio para aclarar cómo personalmente he usado la respuesta de Stijn para resolver esto. Él tiene algo de código en su archivo de MSBuild que escribe el archivo vsprops para él. Decidí tomar un enfoque más simple y acaba de escribir el archivo manualmente.

He creado este archivo, llamados build.vsprops (mi ruta de salida es V:)

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

A continuación, he editado mi archivo de MSBuild para agregar el parámetro de anulación:

<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>
¿Fue útil?

Solución

echar un vistazo al parámetro Invalidar del VCBuild tarea. Básicamente se especifica una hoja de propiedades que se pueden utilizar para modificar el que la propiedad que desea (que tiene el mismo efecto que la adición de una hoja de propiedades de la parte superior de la lista en un proyecto dentro de VS). Incluso se podría generar el archivo de desbloqueo mediante la tarea WriteLinesToFile.

Ejemplo:

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

A continuación, pasar $ (VCOverridesFile) a la propiedad de anulación y asegurarse de que su tarea VCBuild DependsOnTarget WriteOverridesFile.

Otros consejos

Hacerlo de la manera sucia puede pasar ruta del directorio de salida a través de argumentos de línea de comandos de msbuild.

msbuild yourProject /p:OutDir=yourPath

Aunque sospecho, no debe ser la mejor manera de realizar la tarea. La idea principal es establecer la propiedad 'OutDir' de tal manera que no será sobreescrito por su SomeProject.vcproj

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top