2013-06-11 2 views
2

Я хочу, чтобы все файлы проект подContent\** иметь CopyToOutputDirectory набор для PreserveNewest по умолчанию, все еще имея добавить каждый элемент (поэтому не подстановочный не включает). Что-то вроде:Условные метаданные элемента по умолчанию

<ItemDefinitionGroup> 
    <Content Include="Content\**\*"> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemDefinitionGroup> 

К сожалению ItemDefinition не поддерживает Include атрибут. Я также попытался:

<ItemDefinitionGroup> 
    <Content> 
    <CopyToOutputDirectory Condition="$([System.String]::new('%(Identity)').StartsWith('Content\'))">PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemDefinitionGroup> 

как предложено here, но кажется, что он не работает в ItemDefinition. На самом деле, когда я попытался это:

<ItemDefinitionGroup> 
    <Content> 
    <CustomToolNamespace>Foo = $([System.String]::new(%(Identity)))</CustomToolNamespace> 
    </Content> 
</ItemDefinitionGroup> 

Значение CustomToolNamespace сообщает панели Properties была Foo = %(Identity).

ответ

0

Если вы хотите создать новые метаданные для ItemGroup:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" > 
<ItemDefinitionGroup> 
    <Content> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemDefinitionGroup> 

<Target Name="Definition"> 
    <ItemGroup> 
     <Content Include="Content\**\*"/> 
    </ItemGroup> 

    <Message Text="%(Content.CopyToOutputDirectory)"/> 
</Target> 
</Project> 

Это добавляет новый metatdata к ItemGroup.

Можно также объединить два itemgroups, основанные на различных Включает и метаданные, как:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" > 
<ItemDefinitionGroup> 
    <WithContent> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </WithContent> 
</ItemDefinitionGroup> 

<Target Name="Definition"> 
    <ItemGroup> 
     <NotContent Include="Content\**\not*"/> 
    </ItemGroup> 
    <ItemGroup> 
     <WithContent Include="Content\**\with*"/> 
    </ItemGroup> 

    <ItemGroup> 
    <Content Include="@(NotContent)"/> 
    <Content Include="@(WithContent)"/> 
    </ItemGroup> 

    <Message Text="Added together: %(Content.CopyToOutputDirectory)"/> 
    <Message Text="Added together: %(Content.Identity)"/> 

</Target> 
</Project> 
+0

Это установит 'CopyToOutputDirectory' на все содержимое, а не только внутри' Content \ 'и будет включать в себя все файлы в этом каталоге в проект, который я не хочу делать («поэтому нет подстановочных знаков»). –

+0

yes Это будет сделано для любой группы элементов, которая называется content. Тем не менее, прекращение использования другого имени или даже нескольких групп элементов и объединение. –

+0

Я не вижу, как поможет другое имя. Мне нужны метаданные на ''. –

Смежные вопросы