2010-06-09 9 views
12

Osservare il seguente pezzo di uno script msbuild:Come rendere gli elementi ItemGroup di msbuild separati da uno spazio anziché da un punto e virgola?

<ItemGroup> 
    <R Include="-Microsoft.Design#CA1000" /> 
    <R Include="-Microsoft.Design#CA1002" /> 
</ItemGroup> 

voglio convertirlo in

/ruleid:-Microsoft.Design#CA1000 /ruleid:-Microsoft.Design#CA1002

Ora, il migliore mi è venuta è @(R -> '/ruleid:%(Identity)'), ma questo solo i rendimenti

/ruleid:-Microsoft.Design#CA1000;/ruleid:-Microsoft.Design#CA1002

Nota il punto e virgola che separa e due regole, invece di uno spazio. Questo è male, non è riconosciuto da fxcop - ho bisogno di uno spazio lì.

Ora, questo è un esempio semplice, così ho potuto solo dichiarare qualcosa di simile:

<PropertyGroup> 
    <R>/ruleid:-Microsoft.Design#CA1000 /ruleid:-Microsoft.Design#CA1002</R 
</PropertyGroup> 

Ma, non mi piace questo, perché in realtà ho molte regole desidero disattivare e che elenca tutti di loro come questo è qualcosa che vorrei evitare.

risposta

20

per delimitare ogni elemento utilizzando un carattere diverso da una virgola, utilizzare la sintassi @(myType, 'separator')

<ItemGroup> 
    <R Include="-Microsoft.Design#CA1000" /> 
    <R Include="-Microsoft.Design#CA1002" /> 
</ItemGroup> 

<Target Name="FxcopRulesFlattening"> 
    <!-- Using the syntax @(ItemName, 'Separator')--> 
    <Message Text="@(R -> '/ruleid:%(Identity)', ' ')"/> 
</Target> 
Problemi correlati