如何在Exec任务中更新环境变量?

4
我正在尝试将命令的输出导入到环境变量中,方法如下:
<Exec Command="for /f &quot;tokens=*&quot; %%i in ('svn info') do SET SVNINFO=%%i" />

然后在 MSBuild 中将 SVNINFO 作为属性使用。

虽然命令行版本:

for /f "tokens=*" %i in ('svn info') do SET SVNINFO=%i

是可以工作的,但是当从 Exec 调用时,环境变量的值的更改不会持久保存。(我无法将其值作为属性获取。)我是否有所遗漏?有没有更好的方法来实现这一点?


我的答案反馈将不胜感激。 - Filburt
2个回答

2

从.NET 4.5开始,您可以通过设置ConsoleToMsBuild="true"参数并使用其ConsoleOutput参数来捕获Exec任务的输出(文档)。例如,以下目标将%TIME%值捕获到Time MSBuild属性中:

<Project>
  <Target Name="Build">
    <Exec Command="echo %TIME%" ConsoleToMSBuild="true">
      <Output TaskParameter="ConsoleOutput" PropertyName="Time" />
    </Exec>
    <Message Text="Current time is $(Time)" />
  </Target>
</Project>

1

也许使用Exec任务输出是更好的方式:

<Project DefaultTargets="DefaultTarget" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Exe">
        <Exec Command="echo %PATH%">
            <Output TaskParameter="Outputs" PropertyName="ExecOutput" />
        </Exec>
    </Target>

    <Target Name="DefaultTarget" DependsOnTargets="Exe">
        <Message Text="Result from Exec is $(ExecOutput)" />
    </Target>

</Project>

它不起作用,msbuild的exec太愚蠢了,无法获取输出。 - niXar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接