Msbuild可以动态生成Item.Metadata的列表吗?

问题描述:

<SqlToMetadataMultiTask ConnectionString="$(ConnectionString)"> 
     <Output TaskParameter="Items" ItemName="MultiStats" /> 
     <Output TaskParameter="Columns" ItemName="MultiColumns" /> 
     </SqlToMetadataMultiTask> 
     <PropertyGroup> 
      <OutputFormat>@(MultiColumns,',')</OutputFormat> 
     </PropertyGroup> 
     <Message Text="[email protected](MultiColumns,',')"/> 
     <WriteLinesToFile File="SqlMetricsMulti.csv" Overwrite="true" Lines="@(MultiColumns,',')" /> 
     <WriteLinesToFile File="SqlMetricsMulti.csv" Overwrite="false" 
      Lines="@(MultiStats->'%(db),%(num_procs),%(len_procs),%(cursors_refs),%(tt_refs),%(ifs),%(cases),%(where),%(join),%(ands),%(ors)')" /> 

我对每个数据库都有一行,并写出列标题,然后写出每个数据库的元数据存储指标。Msbuild可以动态生成Item.Metadata的列表吗?

我可以使这个任务更通用吗,以便动态生成数据输出列,就像列标题正在完成一样吗?在某些情况下,这将是另一个项目组根据输入动态白名单的自定义元数据。

在下面的链接中看到这个答案,它有点类似,将项目元数据写入文件。您需要查看ITaskItem的文档,特别是ITaskItem.CloneCustomMetadata以获取您要查找的通用行为。

Passing Items to MSBuild Task