0

我正在尝试使用 Sandcastle Help File Builder 为我的应用程序构建文档。一项要求是我必须指定文档来源,例如:

<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>

一切正常。有任何想法吗?

4

1 回答 1

2

使用符号 @(myType) 可以将 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
于 2009-03-25T08:20:52.930 回答