CruiseControl.net , msbuild, /p:OutputPath и ccnetartifactдиректория

StackOverflow https://stackoverflow.com/questions/835

  •  08-06-2019
  •  | 
  •  

Вопрос

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

В соответствии с Документация, он передает CCNetArtifactDirectory в MSBuild.Но как мне это использовать?

Я попробовал это:

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

Но это не работает.Фактически, это убивает службу с помощью этой ошибки:

ThoughtWorks.CruiseControl.Core.Config.Препроцессор.Исключение EvaluationException:Ссылка на неизвестный символ ccnetartifactдиректория

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

Это было полезно?

Решение

Ccnetartifactдиректория передается 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 [Имяпроекта] \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>

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

Другие советы

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

Такие параметры, как 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top