【发布时间】: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