CruiseControl.net,msbuild,/ p:OutputPath和CCNetArtifactDirectory
时间:2020-03-05 18:37:26 来源:igfitidea点击:
我目前正在尝试设置CruiseControl.net。到目前为止,它的工作情况不错,但我的MSBuild任务有问题。
根据文档,它将CCNetArtifactDirectory传递给MSBuild。但是我该如何使用呢?
我尝试了这个:
<buildArgs> /noconsolelogger /p:OutputPath=$(CCNetArtifactDirectory)\test </buildArgs>
但这是行不通的。实际上,它会由于以下错误而终止该服务:
ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException: Reference to unknown symbol CCNetArtifactDirectory
文档非常稀疏,并且google und主要提供修改.sln Project文件的功能,这是我要避免的功能,以便以后能够手动生成该项目,我真的希望/ 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 \ 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>
这将使我们可以将输出发布到其他位置。
我们可以在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>