Frage

Ich bin versucht, setup CruiseControl.net im moment.So weit funktioniert es nett, aber ich habe ein Problem mit der MSBuild-Aufgabe.

Nach der Dokumentation, es geht CCNetArtifactDirectory, um MSBuild.Aber wie verwende ich es?

Ich versuchte dies:

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

Aber das funktioniert nicht.In der Tat, es tötet den Dienst mit diesem Fehler:

ThoughtWorks.CruiseControl.Kern.Config.Präprozessor.EvaluationException:Reference an unknown symbol CCNetArtifactDirectory

Dokumentation ist eher spärlich, und google und bietet vor allem eine änderung der .sln-Projekt-Datei, das ist es, was ich vermeiden möchte, um in der Lage sein, manuell zu erstellen Sie dieses Projekt später - würde ich wirklich lieber /p:OutputPath.

War es hilfreich?

Lösung

Die CCNetArtifactDirectory übergeben, die MSBuild standardmäßig, so dass Sie nicht brauchen sorgen über es.MSBuild wird, legen Sie die build-Ausgabe in der "bin " location" relevant für die Arbeit-Verzeichnis, das Sie angegeben haben.

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

So im obigen Beispiel Ihre build-Ausgabe wird in C:\data\projects\FooSolution[ProjectName]\bin\Debug.Sollte Sie ausgeben möchten zu einem anderen Ort möchten Sie vielleicht zu schauen, der tag in der CCNET.

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

Dies wird Ihnen ermöglichen, veröffentlichen Sie Ihre Ausgabe an einen anderen Speicherort.

Andere Tipps

Sie können verwenden Sie die Artefakt-Verzeichnis variable in die MSBuild-Skript selbst.Hier ist ein Beispiel, wie ich bin mit FxCop jetzt von meinem CC.Net MSBuild-Skript (das Skript ist das, was CC.Net Punkte - es ist auch ein "Build" - Ziel in das Skript enthält eine MSBuild-Aufgabe gegen die SLN, um die tatsächliche Kompilierung):

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

Parameter wie CCNetArtifactDirectory eine Weitergabe an externe Programme mit Hilfe von Umgebungsvariablen.Sie werden in das externe Programm aber Sie werden nicht in CCNET Konfiguration.Dies führt oft zu Verwirrung.

Sie können eine Präprozessor-Konstante statt:

<cb:define project.artifactDirectory="C:\foo">
<project>
  <!-- [...] -->
  <artifactDirectory>$(project.artifactDirectory)</artifactDirectory>
  <!-- [...] -->
  <tasks>
    <!-- [...] -->
    <msbuild>
      <!-- [...] -->
      <buildArgs>/noconsolelogger /p:OutputPath=$(project.artifactDirectory)\test</buildArgs>
      <!-- [...] -->
    </msbuild>
    <!-- [...] -->
  </tasks>
  <!-- [...] -->
</project>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top