2009-05-28 20 views
2

データベースをアップグレードするためのMSBuildタスクを作成中(フルソースhere)、エラーが発生しました/設計上の特徴によって対処方法がわかりません。私は宣言した場合、基本的に:MSBuildのNull可能なパラメータ値

<Target Name="Upgrade"> 
    <UpgradeDatabase ... TargetVersion="10" /> 
</Target> 

MSBuildのは、フリークアウトと

エラーMSB4030と言う: "10"、その後

public int? TargetVersion 
{ 
    [DebuggerStepThrough] 
    get { return targetVersion; } 
    [DebuggerStepThrough] 
    set { targetVersion = value; } 
} 

とは.msbuildファイルの値を代入しようとし"UpgradeDatabase"タスクの "TargetVersion"パラメータの値が無効です。 "TargetVersion"パラメータの型は "System.Nullable`1 [System.Int32]"です。

nullableプロパティに値を割り当てるにはどうすればよいですか?

答えて

2

MSBuildはnull値をサポートしていないようです。回避策は、nullableプロパティを内部的に使用することですが、nullを許可しないプロパティを公開します。このように、パブリックプロパティへの最初の割り当ては、内部値をnullから実際の値に設定するので、新規に初期化されたインスタンスではnullになりますが、MSBuildはその値をうまく割り当てることができます。直接nullablesを支援へのMSBuildをだますためにいくつかの方法がある場合を除き、ある

:)

2

私はあなたが[必須]もう少しタグに見てお勧めします。これはMSBuildがオプションと必要なパラメータを処理する方法です。

+0

はい、値が明示的に割り当てられているかどうかを知ることができてうれしいです。たとえば、OPの例でTargetVersionを0に設定した場合はどうなりますか? nullable型を使用すると、未設定値とその型のデフォルト値に等しい明示的に設定された値を区別できます。 – zcrar70

関連する問題