我试图将命令的输出传递给Environment变量:
<Exec Command="for /f "tokens=*" %%i in ('svn info') do SET SVNINFO=%%i" />
然后使用SVNINFO作为MSBuild中的属性。
命令行对应部分:
for / f“tokens = *”%i in('svn info')do SET SVNINFO =%i
有效,从Exec调用时,Environment变量值的变化不会持久。 (我无法获得它作为财产的价值。)我在这里遗漏了什么吗?有没有更好的方法来实现这个目标?
答案 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>