Как исключить задания пост-сборки с помощью MSBuild & Cruise Control - PullRequest
0 голосов
/ 01 сентября 2009

У нас есть проект библиотеки, который мы используем для всего нашего многократно используемого кода, который называется "CentralLibs.dll"

Эта библиотека получает GAC на всех наших серверах во время развертывания, поэтому для удобства работы DEV, когда они работают локально, существует событие после сборки, которое автоматически обновляет их локальный GAC с помощью новой пост-сборки DLL. 1003 *

cd $(ProjectDir)\bin\Debug
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /if CentralLibs.dll

Недавно мы настроили Cruise Control, который использует событие после сборки, потому что SDK не установлен на сервере сборки, но, думая об этом, я не хочу, чтобы библиотека GAC каждый раз в любом случае там происходит сборка.

Есть ли способ применить дополнительный параметр к нашей команде CC.NET MSBuild, чтобы запретить запускать событие после сборки. в настоящее время это выглядит так.

<msbuild>
    <executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
    <workingDirectory>C:\BuildRepo\trunk\CentralLibs\</workingDirectory>
    <projectFile>CentralLibs.sln</projectFile>
    <buildArgs>/noconsolelogger /p:Configuration=Debug /v:quiet</buildArgs>
    <targets>Build</targets>
    <timeout>600</timeout>
</msbuild>

Полагаю, я ищу что-то вроде /nopostbuild переключателя, который можно применить к тегу <buildArgs>

Существует ли такой параметр? Не очень повезло с MSBuild.exe /? детали

Ответы [ 2 ]

2 голосов
/ 01 сентября 2009

Я бы, вероятно, создал собственный скрипт msbuild только для круиз-контроля, но это, вероятно, больше работы, чем вы хотели.

Вместо этого вы можете добавить условие к шагу группы свойств события Build в файле проекта следующим образом:

  <PropertyGroup Condition="$(DoEvents)!='false'">
      <PostBuildEvent>cd $(ProjectDir)\bin\Debug"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /if CentralLibs.dll</PostBuildEvent>
  </PropertyGroup>

Затем в круиз-контроле добавьте свойство DoEvents, например:

<msbuild>
    <executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
    <workingDirectory>C:\BuildRepo\trunk\CentralLibs\</workingDirectory>      
    <projectFile>CentralLibs.sln</projectFile>  
    <buildArgs>/noconsolelogger /p:Configuration=Debug /p:DoEvents=false /v:quiet</buildArgs>    
    <targets>Build</targets>
    <timeout>600</timeout>
</msbuild>
0 голосов
/ 01 сентября 2009

Один из способов - определить переменную среды NO_GACUTIL и запускать gacutil.exe на шаге, только если переменная среды не установлена.

В качестве альтернативы, запускайте gacutil.exe, только если он существует (используя cmd.exe if exist)

...