Сведения о вопросе

Ayrat

16:03, 1st July, 2020

Теги

CruiseControl.net, msbuild, /p:OutputPath и CCNetArtifactDirectory

Просмотров: 495   Ответов: 3

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

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

Я попробовал это сделать:

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

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

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

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



  Сведения об ответе

PAGE

18:03, 1st July, 2020

CCNetArtifactDirectory передается в MSBuild по умолчанию, так что вам не нужно беспокоиться об этом. MSBuild разместит выходные данные сборки в "bin location", относящемся к указанному вами рабочему каталогу.

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

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


  Сведения об ответе

KOMP

18:03, 1st July, 2020

Вы можете использовать переменную каталога артефактов внутри самого скрипта MSBuild. Вот пример того, как я запускаю FxCop прямо сейчас из моего сценария CC.Net MSBuild (этот сценарий-то, на что указывает CC.Net - есть также цель "Build" в сценарии, которая включает задачу MSBuild против SLN, чтобы сделать фактическую компиляцию):

<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"
/>


  Сведения об ответе

crush

18:03, 1st July, 2020

Такие параметры, как 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>


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться