2008-08-03 3 views
14

Je suis en train de configurer CruiseControl.net pour le moment. Jusqu'à présent, cela fonctionne bien, mais j'ai un problème avec la tâche MSBuild.CruiseControl.net, msbuild,/p: OutputPath et CCNetArtifactDirectory

Selon le Documentation, il transmet CCNetArtifactDirectory à MSBuild. Mais comment l'utiliser?

J'ai essayé ceci:

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

Mais cela ne fonctionne pas. En fait, il tue le service avec cette erreur:

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

La documentation est plutôt rare, et Google und offre principalement la modification du fichier de projet .sln, qui est ce que je veux éviter, afin de pouvoir construire manuellement ce projet plus tard - je préférerais vraiment /p:OutputPath.

Répondre

6

CCNetArtifactDirectory est transmis par défaut à MSBuild, vous n'avez donc pas besoin de vous en préoccuper. MSBuild placera la sortie de construction dans l'emplacement "bin" correspondant au répertoire de travail que vous avez spécifié.

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

Ainsi, dans l'exemple ci-dessus votre sortie de construction seront mis dans C: \ data \ projects \ FooSolution [ProjectName] \ bin \ Debug. Si vous souhaitez exporter vers un emplacement différent, vous pouvez consulter la balise dans CCNET.

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

Cela vous permettra de publier votre sortie à un emplacement différent.

5

Vous pouvez utiliser la variable de répertoire d'artefacts dans le script MSBuild lui-même. Voici un exemple de la façon dont je lance FxCop en ce moment à partir de mon script CC.Net MSBuild (ce script est ce que CC.Net pointe vers - il y a aussi une cible "Build" dans le script qui inclut une tâche MSBuild par rapport à la SLN faire la compilation proprement dite):

<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

les paramètres tels que CCNetArtifactDirectory sont passés à des programmes externes à l'aide des variables d'environnement. Ils sont disponibles dans le programme externe mais ils ne sont pas dans la configuration CCNET. Cela conduit souvent à la confusion.

Vous pouvez utiliser un préprocesseur constant au lieu:

<cb:define project.artifactDirectory="C:\foo"> 
<project> 
    <!-- [...] --> 
    <artifactDirectory>$(project.artifactDirectory)</artifactDirectory> 
    <!-- [...] --> 
    <tasks> 
    <!-- [...] --> 
    <msbuild> 
     <!-- [...] --> 
     <buildArgs>/noconsolelogger /p:OutputPath=$(project.artifactDirectory)\test</buildArgs> 
     <!-- [...] --> 
    </msbuild> 
    <!-- [...] --> 
    </tasks> 
    <!-- [...] --> 
</project>