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

时间:2010-03-18 10:31:53

标签: msbuild

我试图将命令的输出传递给Environment变量:

<Exec Command="for /f &quot;tokens=*&quot; %%i in ('svn info') do SET SVNINFO=%%i" />

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

命令行对应部分:

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

有效,从Exec调用时,Environment变量值的变化不会持久。 (我无法获得它作为财产的价值。)我在这里遗漏了什么吗?有没有更好的方法来实现这个目标?

2 个答案:

答案 0 :(得分:1)

从 .NET 4.5 开始,您可以通过设置 Exec (documentation) 使用 ConsoleOutput 参数捕获 ConsoleToMsBuild="true" 任务的输出。例如,以下目标将 %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 :(得分:0)

使用Exec Task Output是一种更好的方法:

<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>