【问题标题】:How do I get MSBuild Message task to display a property?如何让 MSBuild 消息任务显示属性?
【发布时间】:2017-01-31 15:49:08
【问题描述】:

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

【问题讨论】:

  • 无法重现,我在这里得到正确的输出(虽然没有 '[exec]' 部分,这是从哪里来的?)再说一次,你显示的不是有效的 msbuild,因为它缺少一堆标签(PropertyGroup/Target)。我添加了那些我认为你也有它们的地方,但我不能确定......最好显示你正在使用的完整代码,以及你如何调用它。

标签: msbuild


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 2013-02-14
    • 2011-11-25
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多