我们有一个库项目,我们用于所有我们的中央重用代码“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 /没有运气好吗?细节
答案 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
)