如何让MSBuild Message任务显示属性?

时间:2017-01-31 15:49:09

标签: msbuild

根据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)的内容打印到控制台?

1 个答案:

答案 0 :(得分:1)

就我而言,正在从ant exec task调用MSBuild.exe。如果删除此步骤并直接从命令行调用MSBuild,则问题就会消失。

更新2017.02.08: 进一步调查,我发现我们的ant构建脚本将msbuild的控制台输出解析为“有用的”#39;删除&#39;不需要的&#39;内容使用基于正则表达式的字符串替换数组。

顺便说一句,&#39; [exec]&#39;在我在问题中发布的输出的开头是由ant添加。