17

現在、CruiseControl.netをセットアップしようとしています。これまでのところうまく機能していますが、MSBuildタスクに問題があります。

ドキュメントによると、CCNetArtifactDirectoryをMSBuildに渡します。しかし、どうすればそれを使用できますか?

私はこれを試しました:

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

しかし、それは機能しません。実際、次のエラーでサービスが強制終了されます。

ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException:不明なシンボルCCNetArtifactDirectoryへの参照

ドキュメントはかなりまばらで、google undは主に.slnプロジェクトファイルの変更を提供しています。これは、後でこのプロジェクトを手動でビルドできるようにするために避けたいものです/p:OutputPath

4

3 に答える 3

6

CCNetArtifactDirectoryはデフォルトでMSBuildに渡されるため、心配する必要はありません。MSBuildは、指定した作業ディレクトリに関連する「ビンの場所」にビルド出力を配置します。

<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 に答える