在 .NET Core 和 .NET Standard 项目中,如果您将文件和文件夹放在项目目录中,它们会被 Visual Studio 自动识别为项目的一部分。如果我有那些并不是项目本身(在代码或内容方面)的文件/文件夹,除了彻底删除它们,是否有一种方法可以像针对完整 .NET Framework 的项目一样将它们从项目中排除?
在csproj文件中还有几件事情可以做,以确保文件不被捡起:
1)确保没有寻找“项目项”的任何全局模式会捡起这些文件:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);your_nonproj.file;a\**\*.pattern</DefaultItemExcludes>
</PropertyGroup>
2) 明确删除项目:
<ItemGroup>
<None Remove="hidden.file" />
<Content Remove="wwwroot\lib\**\*" />
</ItemGroup>
请注意,在大型目录(文件数量较多)中,使用DefaultItemExcludes和folder\**
模式会更快,因为msbuild将完全跳过遍历该目录。 使用remove仍然会让msbuild花费很长时间来发现文件。
the\folder\**
模式的DefaultItemExcludes
会更快,因为msbuild将完全跳过遍历该目录。如果使用删除操作,msbuild仍然需要花费相当长的时间来发现文件。 - Martin Ullrich<Compile Remove="otherproject\**\*" />
来使它能够在一个项目位于另一个子文件夹中时进行构建。 - Segfault只为完整起见,如果您正在使用 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\**\*" />
也没有起作用。
node_modules
),因为它将防止编译器甚至查找那些目录,这将显著减少构建时间(在 node_modules
的情况下)。 - Sensei_Shoh<Compile Remove="excluded_folder\**" />
防止编译器甚至查看那些目录。 - XpleriaRemove
可能会防止 VS 向你抛出错误,但它仍然会影响到你的构建时间。另外,你遗漏了 Content
,所以如果在排除的文件夹中有 “content” 文件,它们仍然会被包含。在我看来, <DefaultItemExcludes>
又赢了一局,因为你只需要指定一次要排除的 glob,而不是像你所展示的那样为每种项目类型都指定一次。 - Sensei_ShohRemove
。显然,它们都很有用。我只是想说,在排除那些从未出现在构建中的文件/文件夹(例如 node_modules
)时,Remove
不是正确的工具,最好使用 DefaultItemExcludes
。 - Sensei_Shoh在Visual Studio中打开项目,右键单击解决方案资源管理器中的文件和文件夹。选择从项目中排除
。
对于 .NET Framework 目标项目来说,这正是所要做的。
<ItemGroup>
<Compile Remove="Templates\**" />
<Content Include="Templates\**" />
</ItemGroup>
CopyToOutputFolder
属性为Never
。 - VMAtm