我正在编写一个MSBuild任务来升级数据库(完整源here)并遇到错误/设计功能我不知道如何处理。基本上,如果我宣布:
public int? TargetVersion
{
[DebuggerStepThrough]
get { return targetVersion; }
[DebuggerStepThrough]
set { targetVersion = value; }
}
然后尝试在.msbuild
文件中分配值:
<Target Name="Upgrade">
<UpgradeDatabase ... TargetVersion="10" />
</Target>
MSBuild吓坏了,并说
错误MSB4030:“10”是“UpgradeDatabase”任务的“TargetVersion”参数的无效值。 “TargetVersion”参数的类型为“System.Nullable .1 [System.Int32]”。
如何为可以为空的属性分配值?
答案 0 :(得分:2)
MSBuild似乎似乎不支持可空值。解决方法是在内部使用可空属性,但提供公共非可空属性。这样,对公共属性的第一次赋值将内部值从null设置为实际值,因此在新初始化的实例中为null,但MSBuild可以愉快地分配其值。
也就是说,除非有某种方法可以将MSBuild直接用于支持nullables:)
答案 1 :(得分:2)
我建议你多看一下[Required]标签。这就是MSBuild处理可选与必需参数的方式。