Как исключить файлы/папки из проекта .NET Core/Standard?

В проектах .NET Core и .NET Standard, если вы помещаете файлы и папки в каталог проекта, они автоматически подбираются Visual Studio; по сути, они являются частью проекта.

Что делать, если у меня есть файлы/папки, которые на самом деле не являются частью самого проекта (с точки зрения кода или контента) - не удаляя их вообще, есть ли способ, который я могу исключить из проекта, поскольку я может с проектами, нацеленными на полную .NET Framework?

Ответ 1

Откройте проект в Visual Studio и щелкните правой кнопкой мыши файлы и папки в обозревателе решений. Выберите Exclude from Project.

То, что вы делаете для проектов, ориентированных на .NET Framework.

Ответ 2

Есть также несколько вещей, которые вы можете сделать в файлах csproj, чтобы убедиться, что файлы не подобраны:

1) Удостоверьтесь, что ни один из шаблонов поиска, которые ищут "элементы проекта", не забирает файлы:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);your_nonproj.file;a\**\*.pattern</DefaultItemExcludes>
</PropertyGroup>

2) Удалить элементы явно:

<ItemGroup>
  <None Remove="hidden.file" />
  <Content Remove="wwwroot\lib\**\*" />
</ItemGroup>

Обратите внимание, что в больших каталогах (число файлов) использование DefaultItemExclude с шаблоном \folder ** происходит намного быстрее, поскольку msbuild полностью пропустит обход каталога. использование удаления для этого все еще позволит msbuild потратить некоторое время на поиск файлов.

Ответ 3

Для полноты, если вы используете ItemGroup для исключения папки, то:

<ItemGroup>
  <Compile Remove="excluded_folder\**" />
  <EmbeddedResource Remove="excluded_folder\**" />
  <None Remove="excluded_folder\**" />
</ItemGroup>

Потому что у меня был угловой проект с папкой node_modules которой были очень длинные пути, и VS продолжал выдавать исключения. И использование <Content Remove="node_modules\**\*"/> не сработало.