2010-11-22 3 views
3

Я пытаюсь написать автоматическую сборку для одного из наших продуктов, и я столкнулся с стенами для некоторых наших проектов VC++: мне нужно иметь возможность устанавливать выходные данные путь туда, где сборки будут скопированы после его завершения.Задача VCBuild в MSBuild - изменить путь вывода

Вот самодельный MSBuild файла:

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





Ответ Стейн в:

Я думал, что я хотел бы использовать это пространство, чтобы выяснить, как я лично использовал Стейн-х ответ, чтобы решить эту проблему. У него есть код в файле MSBuild, который пишет для него файл vsprops. Я решил использовать более простой подход и просто написать файл вручную.

Я создал этот файл, называемый build.vsprops (мой выходной путь V :)

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

Тогда я редактировал свой файл MSBuild, чтобы добавить параметр 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> 

ответ

2
.

. Посмотрите параметр переопределения для VCBuild task. В основном вы указываете лист свойств, который вы можете использовать для переопределения любого свойства, которое вы хотите (он имеет тот же эффект, что и добавление листа свойств в начало списка в проекте в VS). Вы даже можете сгенерировать файл переопределения с помощью задачи WriteLinesToFile.

Пример:

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

Тогда передайте $ (VCOverridesFile) к свойству Override и убедитесь, что VCBuild Task DependsOnTarget WriteOverridesFile.

0

делать это грязным способом вы можете передать выходной каталог каталога через аргументы командной строки msbuild.

msbuild yourProject /p:OutDir=yourPath 

Хотя я подозреваю, что должен быть лучший способ выполнить задачу. Основная идея заключается в том, чтобы установить свойство «OutDir» таким образом, чтобы оно не зависело от вашего SomeProject.vcproj.

. .
+4

Это не работает для задач VCBuild – csauve 2010-11-22 22:44:01

Смежные вопросы