Создайте псевдоним для нескольких элементов в csproj

#c# #visual-studio #csproj

Вопрос:

У меня есть несколько элементов, которые следует удалить из содержимого, компиляции и встроенного ресурса. Я делаю это вот так сейчас:

     <Content Remove="data**" />
    <Content Remove="other**" />
    <Content Remove="etc**" />

    <Compile Remove="data**" />
    <Compile Remove="other**" />
    <Compile Remove="etc**" />

    <EmbeddedResource Remove="data**" />
    <EmbeddedResource Remove="other**" />
    <EmbeddedResource Remove="etc**" />
 

Это работает, но значительно раздувает файл проекта. В идеале я хотел бы создать что-то вроде:

     <RemoveAll Include="data**" />

   ... some magic that checks RemoveAll and 
       emits Content, Compile and EmbeddedResource for all RemoveAlls 
   ...
 

Возможно ли это в csproj? Я уже немного поэкспериментировал с целями, но не смог заставить цель удалить эти предметы.

Комментарии:

1. В качестве альтернативы, не могли бы вы поместить все эти ресурсы во вложенную папку, а затем исключить эту вложенную папку?

2. @MatthewWatson Нет, к сожалению, я не могу его контролировать, он создан зависимостью от третьей стороны.

Ответ №1:

Единственный подход, о котором я знаю, был бы:

 <ItemGroup>
   <RemoveMe Include="data**" />
   <RemoveMe Include="other**" />
   <RemoveMe Include="etc**" />

   <None Remove="@(RemoveMe)" />
   <Compile Remove="@(RemoveMe)" />
   <EmbeddedResource Remove="@(RemoveMe)" />
</ItemGroup>
 

Я уже немного поэкспериментировал с целями, но не смог заставить цель удалить эти предметы.

Обратите внимание, что удаление элементов в целевых объектах не приведет к их удалению из обозревателя решений в Visual Studio. Представление о проекте в SE основано на оценке, при которой не выполняются никакие целевые показатели.

Комментарии:

1. Хм, для меня это замирает.