MSBuild의 항목 값이 아닌 속성 값으로 사용될 때 속성 값이 작동하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/680618

  •  22-08-2019
  •  | 
  •  

문제

Sandcastle 도움말 파일 빌더를 사용하여 응용 프로그램의 문서를 작성하려고합니다. 한 가지 요구 사항은 예를 들어 문서 소스를 지정해야한다는 것입니다.

<DocumentationSources>
    <DocumentationSource sourceFile="@(DocumentationSourceFiles)" xmlns="" />
</DocumentationSources>

다음과 같이 별도의 파일에서 @(documentationSourceFiles)를 정의했습니다.

  <ItemGroup>
     <DocumentationSourceFiles Include="..\src\**\*.exe"></DocumentationSourceFiles>
  </ItemGroup>

그런 다음이 파일을 .shfbproj 파일로 가져 와서 위에서 언급 한대로 사용했습니다. 문제는 @(DocumentationSourceFiles)가 항목 목록으로 인식되지 않고 단지 문자열로 인식된다는 것입니다. 내가 잘못하고있는거야? @(DocumentationSourceFiles)을 단일 값을 가진 속성으로 변경하는 경우 :

<PropertyGroup>
    <DocumentationSourceFiles>S:\SVN\myApp\src\myAppName\Debug\bin\myApp</DocumentationSourceFiles>
</PropertyGroup>

그리고 사용 :

<DocumentationSources>
    <DocumentationSource sourceFile="$(DocumentationSourceFiles)" xmlns="" />
</DocumentationSources>

모든 것이 잘 작동합니다. 어떤 아이디어?

도움이 되었습니까?

해결책

@(mytype)를 사용하면 유형의 유형 항목 모음이 세미콜론 (;) 구분 된 문자열 목록으로 확장되고 매개 변수로 전달 될 수 있습니다. 매개 변수가 유형 문자열 인 경우 매개 변수의 값은 세미콜론으로 분리 된 요소 목록입니다. 매개 변수가 문자열 배열 (String []) 인 경우 각 요소가 세미콜론의 위치에 따라 배열에 삽입됩니다. 작업 매개 변수가 ItaskItem [] 유형 인 경우 메타 데이터가 첨부 된 항목 수집의 내용입니다. 세미콜론 이외의 캐릭터로 각 항목을 구분하려면 구문 @(MyType, 'Separator')를 사용하십시오.

각 항목을 별도로 사용하려면 메타 데이터 표기법을 사용하십시오. %(ItemCollectionName.ItemMetadatAname)

<ItemGroup>
  <DocumentationSourceFiles Include="..\src\**\*.exe"></DocumentationSourceFiles>
</ItemGroup>

<Target Name="TestItem">
  <Message Text="Using @ Notation"/>
  <Message Text="@(DocumentationSourceFiles)"/>
  <Message Text="Using Metadata Notation"/>
  <Message Text="%(DocumentationSourceFiles.RecursiveDir)%(Filename)%(Extension)"/>
</Target>

> Output:
Using @ Notation
..\src\doc1.exe;..\src\doc2.exe;..\src\subdir\doc3.exe
Using Metadata Notation
..\src\doc1.exe
..\src\doc2.exe
..\src\subdir\doc3.exe
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top