Question

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

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

J'ai essayé ceci :

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

Mais ça 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 rare et Google propose principalement de modifier le fichier de projet .sln, ce que je veux éviter afin de pouvoir construire manuellement ce projet plus tard - je préférerais vraiment /p:OutputPath.

Était-ce utile?

La solution

Le CCNetArtifactDirectory est transmis au MSBuild par défaut, vous n'avez donc pas à vous en soucier.MSBuild placera la sortie de build 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 build sera placée dans C:\data\projects\FooSolution[ProjectName]\bin\Debug.Si vous souhaitez effectuer une sortie vers un emplacement différent, vous souhaiterez peut-être 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 vers un emplacement différent.

Autres conseils

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 j'exécute actuellement FxCop à 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 sur 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"
/>

Des paramètres comme CCNetArtifactDirectory sont transmis à des programmes externes à l’aide de variables d’environnement.Ils sont disponibles dans le programme externe mais ils ne sont pas à l'intérieur CCNET configuration.Cela prête souvent à 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top