MSBuild2.0对这两种状态是无法区别的(MSBuild都认为这个Property存在且值为空),这是偶与MSBuild的开发人员之一Dan Moseley交流后得到的。据称在后面的版本中将会对此作出改进。
但是目前MS使用的是下面的方法(Dan Moseley提出的):为每个须判断的Property各加一个新的Property作其相应的状态变量。听上去感觉不错,这确实算一种通用的方法。但是想想,如果此Property数量是几十或都上百,那DOUBLE一下可不是闹着玩的。一个Property用二个Property来控制,代码的复杂度不得不增加不少,而这些并不是必须的。
我的解决方法是,仍用一个变量,但如何区别呢?只须加一个初始文件,为每个Property先设上UNDEINFED或类似的值,这样当后面用时即可简单区分开来。例子:
Init.Targets
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MY1>UNDEFINE</ MY1>
<MY2>UNDEFINE</ MY2>
<MY3>UNDEFINE</ MY3>
<MY4>UNDEFINE</ MY4>
</PropertyGroup>
</Project>
在所须的项目文件一开始加入<Import Project="Init.Targets"/>即可。
这样Condtion=”$(MY1)==’UNDEFINED’”和Condtion=”$(MY1)==’’”就可以区别Property的两种状态了。