我目前正在尝试设置CruiseControl.net。 到目前为止,它工作正常,但是我对MSBuild任务有疑问。
根据文档,它将CCNetArtifactDirectory传递给MSBuild。 但是我该如何使用呢?
我尝试了这个:
1 2 3
| <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位置"中。
1 2 3 4
| <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中的标签。
1 2 3 4 5 6 7 8
| <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任务进行实际的编译):
1 2 3 4 5 6
| <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配置中。这常常导致混乱。
您可以改用预处理器常量:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <cb:define project.artifactDirectory="C:\\foo">
<project>
<!-- [...] -->
$(project.artifactDirectory)</artifactDirectory>
<!-- [...] -->
<tasks>
<!-- [...] -->
<msbuild>
<!-- [...] -->
<buildArgs>/noconsolelogger /p:OutputPath=$(project.artifactDirectory)\\test</buildArgs>
<!-- [...] -->
</msbuild>
<!-- [...] -->
</tasks>
<!-- [...] -->
</project> |