根据the MSDN documentation,MSBuild Message任务应该能够将属性的内容输出到控制台。
这可以通过以下方式简单地证明:
<Message Text=" MSBuildProjectDirectory = $(MSBuildProjectDirectory)" />
当我将上述行作为构建目标的一部分运行时,我会得到类似的结果:
[exec] MSBuildProjectDirectory = .../somefolderpath
在我的构建脚本中,我有一个属性,用于定义可执行文件的路径。它的定义如下所示:
<MyDir Condition="'$(MyDir)' == ''">somepath</MyDir>
<MyEXE Condition="'$(MyEXE)' == ''">$(MyDir)\somefile.exe</MyEXE>
我想打印出$(MyEXE)的内容。 我的期望是这会起作用:
<Message Text=" MyEXE= $(MyEXE)" />
......但它没有。事实上,它的行为似乎根本就没有。
对于以下内容:
<Message Text="TEMP START"/>
<Message Text=" MSBuildProjectDirectory = $(MSBuildProjectDirectory)" />
<Message Text='dollar1 "$(MyEXE)"'/>
<Message Text="dollar2 '$(MyEXE)'"/>
<Message Text='dollar3 $(MyEXE)'/>
<Message Text="dollar4 $(MyEXE)"/>
<Message Text='at1 "@(MyEXE)"'/>
<Message Text="at2 '@(MyEXE)'"/>
<Message Text='at3 @(MyEXE)'/>
<Message Text="at4 @(MyEXE)"/>
<Exec Command='echo "$(MyEXE)"' />
<Exec Command='echo FOO' />
<Message Text="TEMP END"/>
...我得到以下输出:
[exec] TEMP START
[exec] MSBuildProjectDirectory = .../somepath
[exec] at1 ""
[exec] at2 ''
[exec] at3
[exec] at4
[exec] echo FOO
[exec] FOO
[exec] TEMP END
下一行是
<Exec Command='"$(MyEXE)" /someparameter' />
...成功执行exe,因此它显然包含一个值。
值得注意的是,我对@(MyEXE)的使用完全是我对稻草的无知。
有谁知道如何将$(MyEXE)的内容打印到控制台?
答案 0 :(得分:1)
就我而言,正在从ant exec task调用MSBuild.exe。如果删除此步骤并直接从命令行调用MSBuild,则问题就会消失。
更新2017.02.08: 进一步调查,我发现我们的ant构建脚本将msbuild的控制台输出解析为“有用的”#39;删除&#39;不需要的&#39;内容使用基于正则表达式的字符串替换数组。
顺便说一句,&#39; [exec]&#39;在我在问题中发布的输出的开头是由ant添加。