2008-08-03 20 views
14

Şu anda CruiseControl.net kurmaya çalışıyorum. Şimdiye kadar güzel çalışıyor, ancak MSBuild Task ile bir Sorunum var.CruiseControl.net, msbuild,/p: OutputPath ve CCNetArtifactDirectory

Documentation göre CCNetArtifactDirectory MSBuild'e geçirir. Ama nasıl kullanırım?

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

Ama bu işe yaramazsa:

Bu çalıştı.

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

Belgeler oldukça seyrek ve und ağırlıklı elle inşa edebilmek için kaçınmak istediğiniz nedir .Sln Proje dosyasını değiştirerek sunmaktadır google: Aslında bu hata ile hizmet öldürür Bu proje daha sonra - gerçekten /p:OutputPath'u tercih ederim.

cevap

6

CCNetArtifactDirectory varsayılan olarak MSBuild'e iletilir, bu nedenle endişelenmenize gerek yoktur. MSBuild, oluşturma çıktısını, belirttiğiniz çalışma dizini ile ilgili "depo yeri" konumuna yerleştirir.

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

Yani yukarıdaki örnekte, yapı çıktı C konacaktır: \ data \ proje \ FooSolution [ProjeAdı] \ bin \ Debug. Farklı bir konuma çıkış yapmak isterseniz, CCNET'teki etikete bakmak isteyebilirsiniz.

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

Bu, çıktınızı farklı bir yere yayınlamanıza olanak tanır.

5

Artifact dizin değişkenini MSBuild komut dosyasının kendisinde kullanabilirsiniz. Şu anda CCX MSBuild betiğimde FxCop'u nasıl çalıştırdığıma dair bir örnek (bu komut, CC.Net'in işaret ettiği şudur - komut dosyası içinde SLN'ye karşı bir MSBuild görevi de içeren bir "Oluştur" hedefi de vardır.) fiili derleme yapın: CCNetArtifactDirectory gibi

<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

Parametreler ortam değişkenleri kullanarak harici programlara geçirilir. Dış programda kullanılabilirler ancak CCNET yapılandırmasında değildirler. Bu genellikle karışıklığa yol açar.

Sen sürekli yerine ön işlemci kullanabilirsiniz:

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