Pregunta

Estoy intentando configurar CruiseControl.net en este momento.Hasta ahora funciona bien, pero tengo un problema con la tarea MSBuild.

De acuerdo con la Documentación, pasa CCNetArtifactDirectory a MSBuild.¿Pero cómo lo uso?

Probé esto:

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

Pero eso no funciona.De hecho, mata el servicio con este error:

ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluaciónExcepción:Referencia al símbolo desconocido CCNetArtifactDirectory

La documentación es bastante escasa, y Google y principalmente ofrecen modificar el archivo del proyecto .sln, que es lo que quiero evitar para poder construir este proyecto manualmente más adelante. Realmente preferiría /p:OutputPath.

¿Fue útil?

Solución

CCNetArtifactDirectory se pasa a MSBuild de forma predeterminada, por lo que no necesita preocuparse por ello.MSBuild colocará el resultado de la compilación en la "ubicación bin" correspondiente al directorio de trabajo que haya especificado.

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

Entonces, en el ejemplo anterior, el resultado de su compilación se colocará en C:\data\projects\FooSolution[ProjectName]\bin\Debug.Si desea enviar la salida a una ubicación diferente, puede consultar la etiqueta en CCNET.

<publishers>
  <xmllogger />
  <buildpublisher>
    <sourceDir>C:\data\projects\FooSolution\FooProject\bin\Debug</sourceDir>
    <publishDir>C:\published\FooSolution\</publishDir>
    <useLabelSubDirectory>false</useLabelSubDirectory>
  </buildpublisher>
</publishers>

Esto le permitirá publicar su resultado en una ubicación diferente.

Otros consejos

Puede utilizar la variable del directorio de artefactos dentro del propio script de MSBuild.Aquí hay un ejemplo de cómo estoy ejecutando FxCop ahora mismo desde mi secuencia de comandos CC.Net MSBuild (esta secuencia de comandos es a lo que apunta CC.Net; también hay un objetivo "Build" en la secuencia de comandos que incluye una tarea de MSBuild contra el SLN para hacer la compilación real):

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

Parámetros como CCNetArtifactDirectory se pasan a programas externos utilizando variables de entorno.Están disponibles en el programa externo pero no dentro CCNET configuración.Esto suele generar confusión.

Puedes usar una constante de preprocesador en su lugar:

<cb:define project.artifactDirectory="C:\foo">
<project>
  <!-- [...] -->
  <artifactDirectory>$(project.artifactDirectory)</artifactDirectory>
  <!-- [...] -->
  <tasks>
    <!-- [...] -->
    <msbuild>
      <!-- [...] -->
      <buildArgs>/noconsolelogger /p:OutputPath=$(project.artifactDirectory)\test</buildArgs>
      <!-- [...] -->
    </msbuild>
    <!-- [...] -->
  </tasks>
  <!-- [...] -->
</project>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top