17

我正在尝试设置 CruiseControl.net。到目前为止它工作得很好,但我对 MSBuild 任务有疑问。

根据文档,它将 CCNetArtifactDirectory 传递给 MSBuild。但是我该如何使用它呢?

我试过这个:

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

但这不起作用。实际上,它会因以下错误而终止服务:

ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException:引用未知符号 CCNetArtifactDirectory

文档相当稀疏,google und 主要提供修改 .sln 项目文件,这是我想要避免的,以便以后能够手动构建这个项目——我真的更喜欢 .sln 项目文件/p:OutputPath

4

3 回答 3

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

这将允许您将输出发布到不同的位置。

于 2008-08-04T04:45:12.497 回答
5

您可以在 MSBuild 脚本本身中使用工件目录变量。这是我现在如何从我的 CC.Net MSBuild 脚本运行 FxCop 的示例(此脚本是 CC.Net 指向的 - 脚本中还有一个“构建”目标,其中包括针对 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"
/>
于 2008-08-04T14:40:20.360 回答
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>
于 2010-02-26T17:29:08.037 回答