如何从.NET Core/Standard项目中排除文件/文件夹?

Gig*_*igi 34 .net msbuild .net-core visual-studio-2017 .net-standard

在.NET Core和.NET Standard项目中,如果将文件和文件夹放在项目目录中,它们将由Visual Studio自动获取; 基本上他们是项目的一部分.

如果我在那里有文件/文件夹并不是项目本身的一部分(在代码或内容方面) - 如果没有完全删除它们,我有什么方法可以将它们从项目中排除,因为我可以使用项目定位完整的.NET Framework?

Mar*_*ich 57

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

1)确保没有寻找"项目项"的globbing模式获取文件:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);your_nonproj.file;a\**\*.pattern</DefaultItemExcludes>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

2)明确删除项目:

<ItemGroup>
  <None Remove="hidden.file" />
  <Content Remove="wwwroot\lib\**\*" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

  • 在大型目录(文件数)上,使用带有`the\folder\**`模式的`DefaultItemExcludes`要快得多,因为msbuild将完全跳过目录.为此使用删除仍然会让msbuild花费相当多的时间来发现文件. (6认同)
  • 已投票。我认为这应该是公认的答案。 (2认同)
  • 当我们在另一个项目的子文件夹中拥有一个项目时,我必须使用 `&lt;Compile Remove="otherproject\**\*" /&gt;` 来构建它。 (2认同)

Hak*_*tık 11

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

<ItemGroup>
    <Compile Remove="Templates\**" />
    <Content Include="Templates\**" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

模板是文件夹名称(在本例中),其中的所有内容将被编译器忽略,但包含在 VS 中


Lex*_* Li 10

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

这正是您针对.NET Framework的项目所做的.

  • 对于要求使用.NET Core / .NET Standard的Visual Studio Code的我们来说,是吗? (4认同)
  • 编辑项目文件并将此设置添加到 &lt;PropertyGroup&gt; 部分。&lt;DefaultItemExcludes&gt;[文件夹路径]/**;$(DefaultItemExcludes)&lt;/DefaultItemExcludes&gt; (3认同)

Nei*_*rao 5

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

<ItemGroup>
  <Content Remove="excluded_folder\**" />
  <Compile Remove="excluded_folder\**" />
  <EmbeddedResource Remove="excluded_folder\**" />
  <None Remove="excluded_folder\**" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

因为,我的node_modules文件夹有一个角度项目,路径很长,VS 总是抛出异常。而且使用<Content Remove="node_modules\**\*" />不起作用。

  • @Sensei_Shoh我喜欢这个答案的原因是我似乎无法让我的 dotnet5 数据库 &lt;Project Sdk="MSBuild.Sdk.SqlProj/1.16.2"&gt; 完全尊重 &lt;DefaultItemExcludes&gt; ,所以我必须这样做这边走。 (2认同)