0

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

这个库在部署期间在我们所有的服务器上都获得了 GAC,因此为了让 DEV 在本地工作时更方便,有一个构建后事件,可以使用新的 DLL 构建后自动更新他们的本地 GAC。

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 / 运气不好?细节

4

2 回答 2

3

我可能会为巡航控制创建一个自定义 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>
于 2009-09-01T12:30:16.613 回答
0

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

或者,仅在 gacutil.exe 存在时运行(使用 cmd.exe's if exist

于 2009-09-01T12:05:28.567 回答