Как указать несколько типов сборки в задачах devenv, CruiseControl.net

#c# #visual-studio #msbuild #cruisecontrol.net #devenv

#c# #visual-studio #msbuild #cruisecontrol.net #devenv

Вопрос:

Я хочу выполнить очистку и сборку в devenv. Я только что заметил, что флаг buildtype может содержать только один элемент (чистый; Сборка не разрешена). У вас есть какие-либо идеи, как указать несколько типов сборки?

 <tasks>
  <devenv>
    <solutionfile>C:SourceDeveloper.sln</solutionfile>
    <configuration>Release</configuration>
    <buildtype>Build</buildtype> // How to do Clean and build here???
    <executable>C:Program Files (x86)Microsoft Visual Studio 9.0Common7IDEdevenv.com</executable>
    <buildTimeoutSeconds>900</buildTimeoutSeconds>
  </devenv>
</tasks>
  

Ответ №1:

Вам нужны две задачи. Каждый <devenv> блок соответствует одному devenv.com вызову. Опции devenv.com позволяют вам /Clean или /Rebuild только вместо сборки. Если вы хотите сначала очистить, а затем выполнить обычную сборку, вам нужно будет вызвать devenv.com дважды, и поэтому вам нужны две задачи.

Ответ №2:

Есть другой способ обойти это, который заключается в вызове задачи MSBUILD для файла проекта; это, в свою очередь, вызывает devenv для файла решения; преимущество этого в том, что это упрощает интеграцию таких идей, как модульное тестирование, анализ кода и т.д.

Вот пара целей из моего общего.Цели

 <Target Name="Clean">
    <RemoveDir Directories="$(BuildFolder)" />
    <MakeDir Directories="$(BuildFolder)" Condition="!Exists('$(BuildFolder)')" />

    <MSBuild Projects="$(SolutionName).sln" Properties="ReferencePath=$(ReferencePath);Configuration=$(Configuration)" Targets="Clean" />
</Target>

<Target Name="Compile" DependsOnTargets="Version">
    <MSBuild Projects="$(SolutionName).sln" Properties="ReferencePath=$(ReferencePath);Configuration=$(Configuration);OutputPath=$(OutputPath);OutDir=$(OutputPath);DeployDir=$(CodeDeployFolder);Deploy=true;BuildConstants=$(BuildConstants)" />
</Target>
  

Затем для задачи CruiseControl у меня есть

     <msbuild>
        <executable>C:WindowsMicrosoft.NETFrameworkv4.0.30319MSBuild.exe</executable>
        <workingDirectory>code</workingDirectory>
        <projectFile>Mailer.proj</projectFile>
        <targets>BuildAll;DistributeLibrary</targets>
        <logger>C:Program FilesCruiseControl.NETserverThoughtWorks.CruiseControl.MsBuild.dll</logger>
    </msbuild>
  

Это также упрощает добавление новых процессов в вашей ферме сборки, например, скажем, вы хотите внедрить анализ StyleCop в свой проект, вам не нужно изменять CC.NET настройки просто вводят / расширяют цель CodeAnalysis и делают эту часть BuildAll