MSBuild中可为空的参数值

MSBuild中可为空的参数值,msbuild,nullable,Msbuild,Nullable,我正在编写一个MSBuild任务来升级数据库(完整源代码),遇到了一个错误/按设计功能,我不知道如何处理。基本上,如果我声明: public int? TargetVersion { [DebuggerStepThrough] get { return targetVersion; } [DebuggerStepThrough] set { targetVersion = value; } } 然后尝试在.msbuild文件中赋值: <Target Nam

我正在编写一个MSBuild任务来升级数据库(完整源代码),遇到了一个错误/按设计功能,我不知道如何处理。基本上,如果我声明:

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]”


如何为可空属性赋值?

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


也就是说,除非有某种方法可以诱使MSBuild直接支持null:)

我建议您进一步研究[Required]标记。这就是MSBuild处理可选参数与必需参数的方式。

是的,但是能够知道是否显式分配了值是很好的。例如,如果在OP的示例中指定了0的TargetVersion,该怎么办?可为空的类型允许您区分未设置值和显式设置的值,该值等于该类型的默认值。