2008-08-03 51 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

文档是相当稀少,而谷歌UND主要提供修改的.sln工程文件,这是我想要的东西,以避免为了能够手动构建这个项目后 - 我真的更喜欢/p:OutputPath

回答

6

默认情况下,CCNetArtifactDirectory被传递给MSBuild,所以你不必担心它。 MSBuild会将构建输出放置在与您指定的工作目录相关的“bin位置”中。

<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 \项目\ FooSolution [项目] \ BIN \调试。如果您想输出到不同的位置,您可能需要查看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脚本本身内使用工件目录变量。下面是我如何从CC.Net MSBuild脚本运行FxCop的示例(该脚本是CC.Net指向的内容 - 脚本中还包含一个“Build”目标,其中包含针对SLN的MSBuild任务做实际编译):

<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> 
相关问题