2008-08-03 8 views
14

estoy tratando de CruiseControl.net configuración en el momento. Hasta ahora funciona bien, pero tengo un problema con la tarea MSBuild.CruiseControl.net, msbuild,/t: OutputPath y CCNetArtifactDirectory

Según la Documentation, pasa CCNetArtifactDirectory a MSBuild. ¿Pero cómo lo uso?

yo probamos este:

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

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

ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException: Reference to unknown symbol CCNetArtifactDirectory

documentación es bastante escasa, y Google und ofrece principalmente modificando el archivo de proyecto .sln, que es lo que quiero evitar con el fin de ser capaces de construir manualmente este proyecto más tarde - Realmente preferiría /p:OutputPath.

Respuesta

6

El CCNetArtifactDirectory se pasa a la MSBuild por defecto, así que no tienes que preocuparse por ello. MSBuild colocará la salida de compilación en la "ubicación del contenedor" relevante para el directorio de trabajo que usted ha 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> 

Así en el ejemplo anterior se pondrán a su salida de la acumulación en C: \ data \ projects \ FooSolution [Proyecto] \ bin \ Debug. Si desea exportar 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 salida en una ubicación diferente.

5

Usted puede utilizar la variable de directorio artefacto dentro de la propia secuencia de comandos de MSBuild. Aquí está un ejemplo de cómo estoy corriendo FxCop en este momento de mi CC.Net guión MSBuild (este script es lo CC.NET puntos a - también hay un "Build" objetivo en el guión que incluye una tarea de MSBuild en contra de la SLN a 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" 
/> 
2

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

Puede utilizar un preprocesador constante 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> 
Cuestiones relacionadas