CruiseControl.net, MSBuild, / р: OutputPath и CCNetArtifactDirectory

голоса
15

Я пытаюсь настроить CruiseControl.NET в данный момент. До сих пор это работает хорошо, но у меня есть проблемы с MSBuild задачи.

Согласно документации , она проходит CCNetArtifactDirectory в MSBuild. Но как его использовать?

Я попытался это:

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

Но это не работает. На самом деле, это убивает сервис с этой ошибкой:

ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException: Ссылка на неизвестный символ CCNetArtifactDirectory

Документация является довольно редкой, и Google унда основном предложений изменяющих .sln файла проекта, который является то , что я хочу , чтобы избежать того , чтобы иметь возможность вручную создать этот проект позже - я действительно предпочел бы /p:OutputPath.

Задан 03/08/2008 в 22:25
источник пользователем
На других языках...                            


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>

Это позволит вам опубликовать свой выход в другое место.

Ответил 04/08/2008 в 05:45
источник пользователем

голоса
5

Вы можете использовать переменный каталог артефакта внутри самого сценария MSBuild. Вот пример того, как я бегу FxCop прямо сейчас из моего CC.Net MSBuild скрипт (этот скрипт, что указывает на CC.Net - есть также «построить» цель в сценарии, который включает в себя задачу 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"
/>
Ответил 04/08/2008 в 15:40
источник пользователем

голоса
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>
Ответил 26/02/2010 в 18:29
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more