【问题标题】:How do I exclude files/folders from a .NET Core/Standard project?如何从 .NET Core/Standard 项目中排除文件/文件夹?
【发布时间】:2017-08-27 16:20:44
【问题描述】:

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

如果我的文件/文件夹实际上不是项目本身的一部分(就代码或内容而言) - 没有完全删除它们,有没有办法可以将它们从项目中排除,因为我可以与针对完整 .NET Framework 的项目一起使用吗?

【问题讨论】:

  • 您可以将每个文件的CopyToOutputFolder属性设置为Never

标签: .net msbuild .net-core visual-studio-2017 .net-standard


【解决方案1】:

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

1) 确保没有查找“项目项”的通配模式获取文件:

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

2) 明确删除项目:

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

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

【讨论】:

  • 默认使用以下是否有任何问题,并为每个包含的文件使用包含信息。任何性能影响? **;$(DefaultItemExcludes)
  • 在大目录(文件数量)上,使用 DefaultItemExcludesthe\folder\** 模式要快得多,因为 msbuild 将完全跳过目录。为此使用删除仍然会让 msbuild 花费相当多的时间来发现文件。
  • 当我们在另一个项目的子文件夹中有一个项目时,我不得不使用 &lt;Compile Remove="otherproject\**\*" /&gt; 来构建它。
【解决方案2】:

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

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

因为,我有一个带有 node_modules 文件夹的 Angular 项目,该文件夹的路径很长,并且 VS 不断抛出异常。并且使用&lt;Content Remove="node_modules\**\*" /&gt; 不起作用。

【讨论】:

  • 正如@MartinUllrich 所说,最好使用 尤其是 for node_modules),因为它甚至会阻止编译器查看这些目录,这将显着减少构建时间(在 node_modules 的情况下)。
  • 我发布的配置做同样的事情。 &lt;Compile Remove="excluded_folder\**" /&gt; 甚至阻止编译器查看这些目录
  • 其实我相信你是误会了,这不是一回事。正如@MartinUllrich 再次指出的那样,“为此使用删除仍然会让 msbuild 花费相当多的时间来发现文件”。像您在这里使用 Remove 可能会阻止 VS 向您抛出错误,但它仍然会影响您的构建时间。此外,您遗漏了Content,因此如果该excluded_folder 中有“内容”文件,它们仍将被包含在内。 &lt;DefaultItemExcludes&gt;,IMO 的另一个胜利,因为您只需指定一次排除 glob,而不是像您显示的那样为每个项目类型指定。
  • 另外,我想明确一点,我并不是说你应该永远使用Remove。显然,它们都是有用的。我要说的是,在排除构建中从未有任何业务的文件/文件夹的情况下(例如node_modules),Remove 不是该工作的正确工具,最好使用@ 987654334@.
  • @Sensei_Shoh 我喜欢这个答案的原因是我似乎无法让我的 dotnet5 数据库 兑现 在所有,所以我必须这样做。
【解决方案3】:

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

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

【讨论】:

  • 对于使用 Visual Studio Code 的我们来说,目标是 .NET Core/.NET Standard,如所问?
  • 编辑项目文件并将此设置添加到 部分。 [文件夹路径]/**;$(DefaultItemExcludes)
【解决方案4】:

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

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

模板是文件夹名称(在这种情况下),其中的所有内容都将被忽略

【讨论】:

    猜你喜欢
    • 2018-08-31
    • 1970-01-01
    • 2020-08-08
    • 2018-12-05
    • 2017-07-18
    • 2020-08-19
    • 2018-12-04
    • 2017-06-08
    • 2014-12-24
    相关资源
    最近更新 更多