Pergunta

Estou tentando configurar o CruiseControl.net no momento.Até agora funciona bem, mas tenho um problema com a tarefa MSBuild.

De acordo com Documentação, ele passa CCNetArtifactDirectory para o MSBuild.Mas como faço para usá-lo?

Eu tentei isso:

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

Mas isso não funciona.Na verdade, ele mata o serviço com este erro:

ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException:Referência ao símbolo desconhecido CCNetArtifactDirectory

A documentação é bastante escassa, e o Google e oferece principalmente a modificação do arquivo de projeto .sln, que é o que quero evitar para poder construir manualmente este projeto mais tarde - eu realmente preferiria /p:OutputPath.

Foi útil?

Solução

O CCNetArtifactDirectory é passado para o MSBuild por padrão, portanto você não precisa se preocupar com isso.O MSBuild colocará a saída do build no "local do compartimento" relevante para o diretório de trabalho que você especificou.

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

Portanto, no exemplo acima, a saída do seu build será colocada em C:\data\projects\FooSolution[ProjectName]\bin\Debug.Se você quiser enviar para um local diferente, você pode querer dar uma olhada na tag no CCNET.

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

Isso permitirá que você publique sua saída em um local diferente.

Outras dicas

Você pode usar a variável de diretório do artefato dentro do próprio script do MSBuild.Aqui está um exemplo de como estou executando o FxCop agora a partir do meu script CC.Net MSBuild (este script é o que o CC.Net aponta - há também um destino "Build" no script que inclui uma tarefa MSBuild no SLN para faça a compilação 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"
/>

Parâmetros como CCNetArtifactDirectory são passados ​​para programas externos usando variáveis ​​de ambiente.Eles estão disponíveis no programa externo, mas não estão dentro CCNET configuração.Isso muitas vezes leva à confusão.

Você pode usar uma constante de pré-processador:

<cb:define project.artifactDirectory="C:\foo">
<project>
  <!-- [...] -->
  <artifactDirectory>$(project.artifactDirectory)</artifactDirectory>
  <!-- [...] -->
  <tasks>
    <!-- [...] -->
    <msbuild>
      <!-- [...] -->
      <buildArgs>/noconsolelogger /p:OutputPath=$(project.artifactDirectory)\test</buildArgs>
      <!-- [...] -->
    </msbuild>
    <!-- [...] -->
  </tasks>
  <!-- [...] -->
</project>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top