3

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

如何为可为空的属性赋值?

4

2 回答 2

2

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

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

于 2009-05-28T10:02:03.177 回答
2

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

于 2009-06-03T17:13:20.240 回答