如何使用MSBuild和&amp ;;排除后期构建作业巡航控制

时间:2009-09-01 11:51:38

标签: .net visual-studio msbuild cruisecontrol post-build

我们有一个库项目,我们用于所有我们的中央重用代码“CentralLibs.dll”

这个库在部署期间在我们所有的服务器上都获得了GAC,这样当DEV在本地工作时,它们就会变得更加便利,这是一个构建后事件,可以使用新的DLL后期构建自动更新本地GAC。 / p>

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

我们最近设置了Cruise Control,它正在考虑构建后事件,因为SDK没有安装在构建服务器上,但考虑到它,我真的不想每次都使用Library GAC无论如何都会在那里建立。

有没有办法将额外的开关应用到我们的CC.NET MSBuild命令,告诉它不要运行post-build事件。目前它看起来像。

<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 个答案:

答案 0 :(得分:2)

我可能会为巡航控制创建一个自定义的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>

答案 1 :(得分:0)

一种方法是定义环境变量NO_GACUTIL,并且仅在未设置环境变量的步骤中运行gacutil.exe。

或者,只运行gacutil.exe(如果存在)(使用cmd.exe的if exist