代码之家  ›  专栏  ›  技术社区  ›  Eoin Campbell

如何使用MSBuild和Cruise控件排除生成后作业

  •  0
  • Eoin Campbell  · 技术社区  · 16 年前

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

    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 回复  |  直到 16 年前
        1
  •  3
  •   John Hunter    16 年前

    我可能会为巡航控制创建一个自定义的msbuild脚本,但这可能比你想要的要多。

    相反,您可以做的是向项目文件中的“构建”事件属性组步骤添加一个条件,如下所示:

      <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>
    
        2
  •  0
  •   Martin v. Löwis    16 年前

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

    或者,仅在gacutil.exe存在的情况下运行它(使用cmd.exe的 if exist )

    推荐文章