【问题标题】:Calling al.exe from batch file during post build event在构建后事件期间从批处理文件调用 al.exe
【发布时间】:2012-06-06 11:37:10
【问题描述】:

我有一个批处理文件,我想在 VS 2008 的构建后事件中调用它。其中包含对 al.exe 的调用。上述项目的构建通常会以exit code 1 失败。

如果在批处理文件中,我将对al.exe 的调用替换为对C:\Windows\Microsoft.NET\Framework\v2.0.50727\al.exe 的调用,则会根据需要处理构建事件。这意味着在执行批处理文件期间找不到构建后事件“al.exe”。

问题是我需要在我们的构建服务器上执行这个,而不仅仅是在我的机器上,从长远来看,不仅仅是在构建服务器上,所以我宁愿不参考硬编码路径名。

我遇到了环境变量$(MSBuildBinPath)$(MSBuildToolsPath),但是当我在批处理文件中像这样使用它们时,它们没有在构建后事件编辑器中列为宏并且似乎没有解决问题:

"$(MSBuildToolsPath)\al.exe" /link: ...

也许这里的语法(双引号)不正确?当然,我已经尝试了几种变体。如果没有:是否有人有任何其他提示如何使用硬编码路径字符串?我确实在这里找到了建议安装更新版本的 MS 工具的帖子,但是构建服务器的设置不受我的控制并且相当标准化,因此更改它会是一项相当痛苦的任务。出于这个原因,我更喜欢可以在 VS 2008 项目设置中控制的解决方案。

批处理文件是运行由另一个早期构建的项目生成的二进制文件的输出,因此我可以将正确的(取决于机器的)路径写入批处理文件,如果我只知道如何找出路径其他项目或在该项目输出的二进制文件的运行时。

TIA,托马斯

【问题讨论】:

    标签: visual-studio-2008 build-automation


    【解决方案1】:

    您使用什么工具来自动化构建?

    根据我的经验,我不建议将此类内容直接添加到项目文件中。如果您在多个项目文件中执行此类操作,然后需要更改构建的工作方式,这将成为维护的噩梦。

    借鉴@Attila 的建议,我会说创建一个简单的 MSBuild 文件来执行,该文件将处理构建,然后执行我的批处理文件。

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>
        <ProjectsToBuild Include="MyCoolProject.csproj; MyCoolSolution.sln" />
      </ItemGroup>
      <Target Name="Build">
        <MSBuild Projects="@(ProjectsToBuild)" />
        <Exec Command="MyBatchFile.bat $(MSBuildToolsPath)" />
      </Target>
    </Project> 
    

    然后,不要让您的构建服务器在您的项目或解决方案文件上执行构建,而是在上面的文件上执行 MSBuild。

    MSBuild.exe CoolProjectBuildFile.Build
    

    希望这会有所帮助!如果您有任何问题,请告诉我。

    【讨论】:

    • 嗨泰森,感谢您的建议。不过,我不确定我是否理解正确。我正在使用 VS 2008 Professional,它创建的 XML 文件 (.csproj) 看起来像你建议的那种。构建事件之后和之前的构建事件是文件中 中的 XML 部分。所以我的理解是我已经在做你建议的事情(直到现在才意识到)是正确的吗?实际上我并没有在多个项目文件中执行此操作,但有一个项目专门用于执行此操作。
    • 是和否 :-) 随着 DotNET 2.0(和 VS2005)的发布,所有 .csproj 文件实际上都是 MSBuild 文件。基本上我的建议是围绕编译和执行 .bat 文件的过程创建一个包装器,而不是直接包含在 .csproj 文件中(我的个人偏好)您也可以从上面的示例中获取 行,将其直接放在 .csproj 文件的“AfterBuild”目标中。只需直接使用文本编辑器进行编辑即可。
    【解决方案2】:

    您可以尝试在调用脚本时(在构建后)将MSBuildToolsPath 作为参数传递给批处理文件,并使用%1 作为al.exe 的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多