큰 질문입니다! 나는 이것에 대해 내 book과 블로그 게시물 Elements of Reusable MSBuild Scripts: Validation에 깊이 기록했다. 내 접근 방식은 속성과 항목을 다룰 것입니다.
다음은 실행 중지입니다. 공유 .targets 파일에서 유효성 검증 대상을 작성하십시오. 그러면 사용자가 파일을 쉽게 찾을 수 있도록 파일에 선언 된 첫 번째 대상 중 하나 여야합니다.
속성 검증 대상 내부
은 다음과 같이 당신의 속성을 정의 :
<_RequiredProperties Include="Root">
<Value>$(Root)</Value>
</_RequiredProperties>
난에서 속성의 이름을 두는 포함하고 Value
metadata.The의 이유는 내부의 값 나는 이것을 수행하여 Value
이 비어있을 때를 감지 한 다음 include 값을 사용하여 누락 된 속성의 이름을 다시 사용자에게보고합니다.
항목 대상 장소 내부
같은 항목의 내부 필요한 항목 : 내부 속성과 유사
<_RequiredItems Include="AllConfigurations">
<RequiredValue>@(AllConfigurations)</RequiredValue>
</_RequiredItems>
, 당신은 항목의 이름과 그 가치를 포함 RequiredValue
메타 데이터 내부를 확인합니다. 이 예에서는 AllConfiguraitons
항목이 비어 있지 않은지 확인합니다. 이 파일은 다음 추가 메타 데이터, RequiredFilePath를 추가 존재 있는지 확인하려면
<_RequiredItems Include = "AllConfigurations.Configuration">
<RequiredValue>%(AllConfigurations.Configuration </RequiredValue>
</_RequiredItems>
: 당신은 주어진 메타 데이터 값은 다음과 같이 할 모든 항목에 지정되어 있는지 확인하십시오.
<_RequiredItems Include ="ProjectsToBuild">
<RequiredValue>%(ProjectsToBuild.Identity)</RequiredValue>
<RequiredFilePath>%(ProjectsToBuild.Identity)</RequiredFilePath>
</_RequiredItems>
확인 여기
는 검증
을 수행해야 할 것입니다 이것이 내가 찾던 것입니다 - 전체 예제 다음은
전체 예를
<Target Name="ValidateBuildSettings">
<ItemGroup>
<_RequiredProperties Include="Root">
<Value>$(Root)</Value>
</_RequiredProperties>
<_RequiredProperties Include="BuildInstallRoot">
<Value>$(BuildInstallRoot)</Value>
</_RequiredProperties>
<_RequiredProperties Include="SourceRoot">
<Value>$(SourceRoot)</Value>
</_RequiredProperties>
<!--
_RequiredItems is the item where required items should be placed.
The following metadata is significant:
REQUIRED METADATA:
Identity = This will basically be used to identify the specific required item
RequiredValue = This is the specific value that will be validated to exist
OPTIONAL METADATA
RequiredFilePath = Populate this with a path that should exists, if it is not empty
then it will be checked to exist on disk.
-->
<_RequiredItems Include="AllConfigurations">
<RequiredValue>@(AllConfigurations)</RequiredValue>
</_RequiredItems>
<_RequiredItems Include = "AllConfigurations.Configuration">
<RequiredValue>%(AllConfigurations.Configuration </RequiredValue>
</_RequiredItems>
<_RequiredItems Include ="ProjectsToBuild">
<RequiredValue>%(ProjectsToBuild.Identity)</RequiredValue>
<RequiredFilePath>%(ProjectsToBuild.Identity)</RequiredFilePath>
</_RequiredItems>
</ItemGroup>
<!-- Raise an error if any value in _RequiredProperties is missing -->
<Error Condition =" '%(_RequiredProperties.Value)'=='' "
Text=" Missing required property [%(_RequiredProperties.Identity)]" />
<!-- Raise an error if any value in _RequiredItems is empty -->
<Error Condition = " '%(_RequiredItems.RequiredValue)'=='' "
Text = " Missing required item value [%(_RequiredItems.Identity)] " />
<!-- Validate any file/directory that should exist -->
<Error Condition = " '%(_RequiredItems.RequiredFilePath)' != '' and !Exists('%(_RequiredItems.RequiredFilePath)') "
Text = " Unable to find expeceted path [%(_RequiredItems.RequiredFilePath)] on item [%(_RequiredItems.Identity)] " />
</Target>
우수합니다. 본인도 도서 사본을 받아야합니다. –