2008-08-03 12 views
14

Próbuję skonfigurować CruiseControl.net w tej chwili. Do tej pory działa dobrze, ale mam problem z zadaniem MSBuild.CruiseControl.net, msbuild,/p: OutputPath i CCNetArtifactDirectory

Zgodnie z Documentation, przekazuje katalog CCNetArtifactDirectory do MSBuild. Ale jak z niego korzystać?

Próbowałem to:

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

Ale to nie działa. W rzeczywistości, to zabija usługi tego błędu:

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

dokumentacja jest raczej rzadki, a Google und głównie oferuje zmodyfikowanie pliku .sln projekt, który jest, co chcę uniknąć, aby móc ręcznie zbudować ten projekt później - naprawdę wolałbym /p:OutputPath.

Odpowiedz

6

Katalog CCNetArtifactDirectory jest domyślnie przekazywany do MSBuild, więc nie musisz się o to martwić. MSBuild umieści dane wyjściowe kompilacji w "lokalizacji bin" odpowiedniej dla katalogu roboczego, który podałeś.

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

więc w powyższym przykładzie Twój wyjście kompilacji zostaną umieszczone w katalogu C: \ Projects \ dane \ FooSolution [NazwaProjektu] \ bin \ Debug. Jeśli chcesz wyprowadzać dane do innej lokalizacji, możesz chcieć spojrzeć na tag w CCNET.

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

Umożliwi to opublikowanie wyników w innej lokalizacji.

5

Możesz użyć zmiennej katalogu artefaktów wewnątrz samego skryptu MSBuild. Oto przykład tego, jak teraz uruchamiam FxCop ze skryptu CC.Net MSBuild (ten skrypt jest tym, na co wskazuje CC.Net - w skrypcie znajduje się również cel "Build", który zawiera zadanie MSBuild przeciwko SLN, zrobić rzeczywisty kompilację):

<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

Parametry takie jak CCNetArtifactDirectory są przekazywane do zewnętrznych programów wykorzystujących zmienne środowiskowe. Są one dostępne w zewnętrznym programie, ale nie są w konfiguracji CCNET. Często prowadzi to do zamieszania.

Można użyć preprocesor zamiast stałej:

<cb:define project.artifactDirectory="C:\foo"> 
<project> 
    <!-- [...] --> 
    <artifactDirectory>$(project.artifactDirectory)</artifactDirectory> 
    <!-- [...] --> 
    <tasks> 
    <!-- [...] --> 
    <msbuild> 
     <!-- [...] --> 
     <buildArgs>/noconsolelogger /p:OutputPath=$(project.artifactDirectory)\test</buildArgs> 
     <!-- [...] --> 
    </msbuild> 
    <!-- [...] --> 
    </tasks> 
    <!-- [...] --> 
</project>