1

たとえば、次のような場合に、ac#msbuildタスクで同じ名前の複数のアイテムメタデータを取得するにはどうすればよいですか。

 <ItemGroup>    
   <Assemblies Include = "S:\SVN\SomeDirectory\src\">
     <excludeAssembly>AssemblyName_1</excludeAssembly>
     <excludeAssembly>AssemblyName_2</excludeAssembly>
     <excludeAssembly>AssemblyName_3</excludeAssembly>
     <excludeAssembly>AssemblyName_4</excludeAssembly>
   </Assemblies>
 </ItemGroup>

<excludeAssembly>通常使用する場合、すべてのメタデータのリストを取得するにはどうすればよいですか。

var itemData = itemTask.GetMetadata("excludeAssembly")

単一のメタデータ値を取得します。<excludeAssembly>値のリストを取得する必要があります

4

1 に答える 1

2

メタデータはアイテムとは異なります。1つのアイテムに異なるメタデータを設定できますが、メタデータの値は1つだけです。

Microsoft.Build.Engineアセンブリ(BuildItem.EvaluateAllItemMetadata(...))でReflectorを使用すると、アイテムのメタデータがDictionnaryに格納されていることがわかります。したがって、特定のメタデータ名に対して持つことができる値は1つだけです。

この場合の回避策は、次のように、アイテムの名前としてメタデータを使用することです。

<ItemGroup>    
  <Assemblies Include = "S:\SVN\SomeDirectory\src\">
    <excludeAssembly>exludeAssemblySet</excludeAssembly>
  </Assemblies>
</ItemGroup>

<ItemGroup>
  <exludeAssemblySet Include="AssemblyName_1"/>
  <exludeAssemblySet Include="AssemblyName_2"/>
  <exludeAssemblySet Include="AssemblyName_3"/>
  <exludeAssemblySet Include="AssemblyName_4"/>
</ItemGroup>

// Approximative syntax, I don't know what you want to do
var itemData = itemTask.GetMetadata("excludeAssembly");
BuildItemGroup excludeAssemblies = project.GetEvaluatedItemsByName(itemData);
于 2009-03-26T13:46:08.070 に答える