CruiseControl.net, msbuild, / p: OutputPath et CCNetArtifactDirectory

Translate

J'essaye de configurer CruiseControl.net pour le moment. Jusqu'à présent, cela fonctionne bien, mais j'ai un problème avec la tâche MSBuild.

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

J'ai essayé ceci:

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

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

ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException: Référence au symbole inconnu CCNetArtifactDirectory

La documentation est plutôt clairsemée, et google et propose principalement de modifier le fichier .sln Project, ce que je veux éviter pour pouvoir construire manuellement ce projet plus tard - je préférerais vraiment/p:OutputPath.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Le CCNetArtifactDirectory est passé à MSBuild par défaut, vous n'avez donc pas à vous en préoccuper. MSBuild placera la sortie de construction dans «l'emplacement de la corbeille» 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 sera placée dans C: \ data \ projects \ FooSolution [ProjectName] \ bin \ Debug. Si vous souhaitez effectuer une sortie 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 dans un emplacement différent.

La source
Translate

Vous pouvez utiliser la variable de répertoire d'artefact dans le script MSBuild lui-même. Voici un exemple de la façon dont j'exécute FxCop en ce moment à partir de mon script CC.Net MSBuild (ce script est ce vers quoi CC.Net pointe - il y a aussi une cible «Build» dans le script qui inclut une tâche MSBuild contre le SLN pour 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"
/>
La source
Translate

Des paramètres commeCCNetArtifactDirectorysont transmises à des programmes externes à l'aide de variables d'environnement. Ils sont disponibles dans le programme externe mais ils ne sont pas à l'intérieurCCNETconfiguration. Cela conduit souvent à la confusion.

Vous pouvez utiliser une constante de préprocesseur à la place:

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