MSBuild中可为空的参数值
我正在编写一个MSBuild任务来升级数据库(完整源代码),遇到了一个错误/按设计功能,我不知道如何处理。基本上,如果我声明:MSBuild中可为空的参数值,msbuild,nullable,Msbuild,Nullable,我正在编写一个MSBuild任务来升级数据库(完整源代码),遇到了一个错误/按设计功能,我不知道如何处理。基本上,如果我声明: public int? TargetVersion { [DebuggerStepThrough] get { return targetVersion; } [DebuggerStepThrough] set { targetVersion = value; } } 然后尝试在.msbuild文件中赋值: <Target Nam
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,该怎么办?可为空的类型允许您区分未设置值和显式设置的值,该值等于该类型的默认值。