1

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

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

问题是我需要在我们的构建服务器上执行它,而不仅仅是在我的机器上,从长远来看,不仅仅是在构建服务器上,所以我不想引用硬编码的路径名。

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

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

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

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

TIA,托马斯

4

2 回答 2

1

当您调用MSBuildToolsPath脚本(在构建后)并%1使用al.exe.

于 2012-06-06T11:44:10.350 回答
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

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

于 2012-06-06T14:18:11.540 回答