我有一个批处理文件,我想在VS2008的构建后事件中调用它。这包含对al.exe的调用。使用exit code 1构建上述项目通常会失败。
如果在批处理文件中,我将对al.exe的调用替换为对C:\Windows\Microsoft.NET\Framework\v2.0.50727\al.exe的调用,则会根据需要处理build事件。这意味着在生成后事件中,在批处理文件的执行过程中找不到'al.exe‘。
问题是我需要在我们的构建服务器上执行它,而不仅仅是在我的机器上,而且从长远来看,不仅仅是在构建服务器上,所以我不喜欢引用硬编码的路径名。
我遇到了环境变量$(MSBuildBinPath)和$(MSBuildToolsPath),但它们没有在构建后事件编辑器中作为宏列出,当我像这样在批处理文件中使用它们时,它们似乎没有解决问题:
"$(MSBuildToolsPath)\al.exe" /link: ...也许这里的语法(双引号)是不正确的?当然,我已经尝试了几个变体。如果没有:有谁有任何其他的提示如何使用硬编码的路径字符串?我确实在这里找到了建议安装MS工具更新版本的帖子,但构建服务器的设置不在我的控制之下,而且是标准化的,所以改变这一点将是一项相当痛苦的任务。出于这个原因,我更喜欢一个我可以从VS2008项目设置中控制的解决方案。
批处理文件是运行另一个较早构建的项目生成的二进制文件的输出,因此我可以将正确的(依赖于机器的)路径写入批处理文件,只要我知道如何在该其他项目中或在该项目输出的二进制文件的运行时确定路径。
蒂娅,托马斯
发布于 2012-06-06 22:18:12
您正在使用什么工具来自动化构建?
根据我的经验,我不建议将这样的内容直接添加到项目文件中。如果你在多个项目文件中做这些事情,然后需要改变你的构建工作方式,这将成为维护的噩梦。
根据@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-06 19:44:10
您可以尝试在调用脚本时(在构建后)将MSBuildToolsPath作为参数传递给批处理文件,并使用%1作为al.exe的路径。
https://stackoverflow.com/questions/10913439
复制相似问题