gpt4 book ai didi

msbuild - 如何使用 MSBuild 执行 %PATH% 中的程序?

转载 作者:行者123 更新时间:2023-12-02 10:55:38 25 4
gpt4 key购买 nike

注意:我在这里使用 Mercurial 作为示例,因为这就是我现在正在尝试使用 MSBuild 的方式。
但问题不仅限于 Mercurial,它发生在我的 %PATH% 中的每个外部程序中。变量(例如,我尝试使用 PowerShell 进行相同的操作)。
所以我没有故意在这个问题上贴上 Mercurial 标签,因为这不是关于 Mercurial 的!

我真正想做的事情:
我希望我的构建脚本从我的 Mercurial 存储库获取当前修订号并将其存储在文件中。
从命令行执行此操作的最简单方法是:

hg id -i >rev.txt

我的机器上安装了 Mercurial,安装文件夹位于我的 %PATH% 中变量。
因此,我可以从计算机上的任何位置运行此行(直接从命令行或从批处理文件),并且它可以正常工作。

当我尝试从构建脚本运行此行时,会出现问题。
我更改BeforeBuild (或 AfterBuild )我的 .csproj 文件部分如下:

<Target Name="AfterBuild">
<Exec Command="hg id -i >rev.txt"/>
</Target>

当我使用 Visual Studio 编译解决方案时,它可以正常工作,并且会在 .csproj 所在的文件夹中创建 rev.txt 文件。

但是当我使用 MSBuild 从命令行编译完全相同的解决方案时,构建失败并显示以下错误消息:

The command "hg id -i >rev.txt" exited with code 9009.

我用谷歌搜索“msbuild代码9009”并找到some solutions ,但他们都建议提供可执行文件的完整路径。
当我这样做时,MSBuild 的构建也会成功。
但这对我来说不是一个可接受的解决方案,因为我无法确定使用我的项目(包括构建服务器)的每个人都已将 Mercurial 安装在完全相同的文件夹中。
这正是 %PATH%是为了...

当我输入 <Exec Command="... 时,也会发生同样的情况直接写入构建脚本。
如果我指定可执行文件的路径,它就可以工作。
如果我不指定路径,则不会。

有没有什么技巧可以让MSBuild执行我的%PATH%中的程序变量而不指定完整文件夹?

<小时/>

编辑:

@leppie:

输出重定向:
您的意思是我将命令的输出保存在命令内的文本文件中,而不是仅仅运行 hg id -i作为命令并使用输出参数或类似的东西来获取输出?
没有任何区别...当我省略 >rev.txt 时,错误是相同的.

命令行参数:
不,即使我将命令缩短为hg,它也会抛出相同的错误。 (不带任何参数)。

不要忘记:如果我在 Visual Studio 中的完全相同的 .csproj 文件中运行完全相同的 Exec 命令,或者如果我只是在命令中提供 .exe 文件的路径,则一切正常。
因此,IMO 输出重定向和命令行参数不可能是问题所在。

最佳答案

您是否尝试过这个 Mercurial/msbuild 扩展包? http://msbuildhg.codeplex.com/documentation

似乎有一个返回修订 ID 的任务,这正是您想要实现的目标?

<HgVersion LocalPath="$(MSBuildProjectDirectory)" Timeout="5000">
<Output TaskParameter="Revision" PropertyName="AssemblyRevision" />
</HgVersion>

关于msbuild - 如何使用 MSBuild 执行 %PATH% 中的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com