如何从 .NET Core/Standard 项目中排除 files/folders?

How do I exclude files/folders from a .NET Core/Standard project?

在 .NET Core 和 .NET Standard 项目中,如果您将文件和文件夹放在项目目录中,它们会被 Visual Studio 自动拾取;本质上它们是项目的一部分。

如果我有 files/folders 不是项目本身的一部分(就代码或内容而言)怎么办 - 除了完全删除它们之外,有什么方法可以将它们排除在外尽我所能将项目与针对完整 .NET Framework 的项目一起使用?

打开 Visual Studio 中的项目,然后右键单击解决方案资源管理器中的文件和文件夹。选择Exclude from Project.

这正是您对面向 .NET Framework 的项目所做的。

您还可以在 csproj 文件中执行一些操作以确保文件未被拾取:

1) 确保寻找 "project items" 的 globbing 模式中的 none 找到文件:

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

2) 明确删除项目:

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

请注意,在大型目录(文件数量)上,使用 DefaultItemExcludes 和 folder\** 模式要快得多,因为 msbuild 将跳过整个目录。为此使用删除仍然会让 msbuild 花费相当多的时间来发现文件。

为了完整起见,如果您使用 ItemGroup 排除文件夹,则:

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

因为,我有一个 angular 项目,其中 node_modules 文件夹的路径很长,VS 不断抛出异常。使用 <Content Remove="node_modules\**\*" /> 无效。

如果您想从编译过程中排除文件但仍然将它们放在解决方案资源管理器树中,那么

<ItemGroup>
    <Compile Remove="Templates\**" />
    <Content Include="Templates\**" />
</ItemGroup>

模板是文件夹名称(在本例中),其中的所有内容都将被忽略