2008-08-03 5 views
14

Я пытаюсь настроить CruiseControl.net на данный момент. Пока это работает хорошо, но у меня проблема с задачей MSBuild.CruiseControl.net, msbuild,/p: OutputPath и CCNetArtifactDirectory

Согласно Documentation, он передает CCNetArtifactDirectory в MSBuild. Но как его использовать?

Я попытался это:

<buildArgs> 
    /noconsolelogger /p:OutputPath=$(CCNetArtifactDirectory)\test 
</buildArgs> 

Но это не работает. На самом деле, это убивает сервис с этой ошибкой:

ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException: Reference to unknown symbol CCNetArtifactDirectory

документация является довольно редкой, и Google унд основном предлагает модифицирующей файл .sln проекта, который является то, что я хочу, чтобы избежать того, чтобы иметь возможность вручную построить этот проект позже - я бы предпочел /p:OutputPath.

ответ

6

CCNetArtifactDirectory по умолчанию передается в MSBuild, поэтому вам не нужно беспокоиться об этом. MSBuild поместит вывод сборки в «местоположение бункера», относящуюся к указанному вами рабочему каталогу.

<executable>c:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable> 
<workingDirectory>C:\data\projects\FooSolution\</workingDirectory> 
<projectFile>FooSolution.sln</projectFile> 
<buildArgs>/noconsolelogger /p:Configuration=Debug </buildArgs> 

Таким образом, в приведенном выше примере, на выходе сборки будет введен в C: \ Data \ Projects \ FooSolution [ProjectName] \ Bin \ Debug. Если вы хотите выполнить вывод в другое место, вы можете посмотреть на тег в CCNET.

<publishers> 
    <xmllogger /> 
    <buildpublisher> 
    <sourceDir>C:\data\projects\FooSolution\FooProject\bin\Debug</sourceDir> 
    <publishDir>C:\published\FooSolution\</publishDir> 
    <useLabelSubDirectory>false</useLabelSubDirectory> 
    </buildpublisher> 
</publishers> 

Это позволит вам публиковать выходные данные в другом месте.

5

Вы можете использовать переменную каталога артефакта внутри самого скрипта MSBuild. Вот пример того, как я запускаю FxCop прямо сейчас из моего сценария CC.Net MSBuild (этот сценарий указывает на то, что указывает CC.Net), в скрипте также есть цель «Build», которая включает задачу MSBuild против SLN сделать сам процесс компиляции):

<Exec 
    Command='FxCopCmd.exe /project:"$(MSBuildProjectDirectory)\FXCopRules.FxCop" /out:"$(CCNetArtifactDirectory)\ProjectName.FxCop.xml"' 
    WorkingDirectory="C:\Program Files\Microsoft FxCop 1.35" 
    ContinueOnError="true" 
    IgnoreExitCode="true" 
/> 
2

Такие параметры, как CCNetArtifactDirectory передаются во внешние программы с использованием переменных окружения. Они доступны во внешней программе, но они не находятся внутри конфигурации CCNET. Это часто приводит к путанице.

Вы можете использовать препроцессор константу вместо:

<cb:define project.artifactDirectory="C:\foo"> 
<project> 
    <!-- [...] --> 
    <artifactDirectory>$(project.artifactDirectory)</artifactDirectory> 
    <!-- [...] --> 
    <tasks> 
    <!-- [...] --> 
    <msbuild> 
     <!-- [...] --> 
     <buildArgs>/noconsolelogger /p:OutputPath=$(project.artifactDirectory)\test</buildArgs> 
     <!-- [...] --> 
    </msbuild> 
    <!-- [...] --> 
    </tasks> 
    <!-- [...] --> 
</project> 
Смежные вопросы