문제

지금 CruiseControl.net을 설정하려고 합니다.지금까지는 잘 작동하지만 MSBuild 작업에 문제가 있습니다.

에 따르면 선적 서류 비치, CCNetArtifactDirectory를 MSBuild에 전달합니다.그런데 어떻게 사용하나요?

나는 이것을 시도했다:

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

그러나 그것은 작동하지 않습니다.실제로 다음 오류로 인해 서비스가 종료됩니다.

ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException:알 수 없는 기호 CCNetArtifactDirectory에 대한 참조

문서는 다소 드물고 Google은 주로 .sln 프로젝트 파일 수정을 제공합니다. 이는 나중에 이 프로젝트를 수동으로 빌드할 수 없도록 피하고 싶은 것입니다. 정말 선호합니다. /p:OutputPath.

도움이 되었습니까?

해결책

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>

이렇게 하면 출력을 다른 위치에 게시할 수 있습니다.

다른 팁

MSBuild 스크립트 자체 내에서 아티팩트 디렉터리 변수를 사용할 수 있습니다.다음은 CC.Net MSBuild 스크립트에서 지금 FxCop을 실행하는 방법에 대한 예입니다(이 스크립트는 CC.Net이 가리키는 것입니다. 스크립트에는 SLN에 대한 MSBuild 작업을 포함하는 "Build" 대상도 있습니다. 실제 컴파일을 수행합니다):

<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