MSBuild中可为空的参数值

时间:2009-05-28 09:54:54

标签: msbuild nullable

我正在编写一个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]”。

如何为可以为空的属性分配值?

2 个答案:

答案 0 :(得分:2)

MSBuild似乎似乎不支持可空值。解决方法是在内部使用可空属性,但提供公共非可空属性。这样,对公共属性的第一次赋值将内部值从null设置为实际值,因此在新初始化的实例中为null,但MSBuild可以愉快地分配其值。

也就是说,除非有某种方法可以将MSBuild直接用于支持nullables:)

答案 1 :(得分:2)

我建议你多看一下[Required]标签。这就是MSBuild处理可选与必需参数的方式。