CruiseControl.net,msbuild,/ p:OutputPath和CCNetArtifactDirectory
我想在此刻设置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
。
默认情况下,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>
这将允许您将您的输出发布到不同的位置。
您可以在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"
/>
参数,如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>