在后期构建事件期间从批处理文件中调用al.exe

时间:2012-06-06 11:37:10

标签: visual-studio-2008 build-automation

我有一个批处理文件,我想在VS 2008中的post build事件中调用。这包含对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,Thomas

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

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