2009-05-28 7 views
2

데이터베이스 (전체 소스 here)를 업그레이드하기 위해 MSBuild 작업을 작성 중이며 처리하는 방법을 모르겠지만 디자인/기능별로 오류가 발생했습니다.MSBuild에서 Nullable 매개 변수 값

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]"입니다.

nullable 속성에 값을 어떻게 할당합니까?

답변

2

MSBuild가 null 값을 지원하지 않는 것 같습니다. 해결 방법은 nullable 속성을 내부적으로 사용하는 것이지만 null이 아닌 public 속성을 제공하는 것입니다. 이렇게하면 public 속성에 대한 첫 번째 할당은 내부 값을 null에서 실제 값으로 설정하므로 새로 초기화 된 인스턴스에서 null을 갖지만 MSBuild는 해당 값을 행복하게 할당 할 수 있습니다. 지원 nullables으로 MSBuild를 속일 수있는 방법이 존재하지 않는 것입니다

직접 당신이 조금 더 태그 [필수] 들여다 제안

2

을 :). 이것이 MSBuild가 선택적 대 필수 매개 변수를 처리하는 방법입니다.

+0

예, 값이 명시 적으로 할당되었는지 여부를 알 수 있다는 것이 좋습니다. 예를 들어 OP의 예에서 TargetVersion을 0으로 지정했다면 어떻게됩니까? nullable 형식을 사용하면 설정되지 않은 값과 해당 형식의 기본값과 동일한 명시 적으로 설정된 값을 구별 할 수 있습니다. – zcrar70