文件嵌套不适用于类或共享库项目

Posted

技术标签:

【中文标题】文件嵌套不适用于类或共享库项目【英文标题】:Filenesting not working for Class or Shared Library Projects 【发布时间】:2020-04-11 20:13:53 【问题描述】:

在 Visual Studio 2019 Web 项目中,解决方案资源管理器中的文件嵌套非常有用。如果您添加一个名为 ClassA.cs 的文件和另一个名为 ClassA.Custom.cs 的文件,它们将按原样嵌套。

但对于类或共享库项目,它根本不起作用。将设置更改为“默认”或“Web”甚至添加自定义文件嵌套设置都没有关系。

有没有办法配置 Visual Studio 2019,以便文件嵌套也适用于类库项目等?

我知道可以手动更改 *.csproj 文件以添加带有 <DependentUpon> 标签的条目,就像在早期的 Visual Studio 版本中一样,但我真的不喜欢为我的所有类手动更改它的想法有。

<Compile Update="$(ProjectDir)\Person.*.cs">
  <DependentUpon>$(ProjectDir)\Person.cs</DependentUpon>
</Compile>

【问题讨论】:

【参考方案1】:

原答案:

在 Github.com 和开发者社区上有一个关于此主题的问题:

Issue 5722 Developer Community 483587

存在解决此问题的方法 - 至少适用于 .Net Standard 2.0。将以下行添加到您的 *.csproj 文件中:

&lt;ItemGroup&gt; &lt;ProjectCapability Include="DynamicDependentFile" /&gt; &lt;ProjectCapability Include="DynamicFileNesting" /&gt; &lt;/ItemGroup&gt;

更新:

这个问题应该从 Visual Studio 2019 Verison 16.7 开始修复。

【讨论】:

这在包含 TypeScript 源文件和输出 JS 的 .NET Core 3.1 类库项目中对我不起作用。我正在使用 VS 2019 16.10。 does 实际上适用于 .NET Core 3.1 库...但必须有一个 .filenesting.json 在解决方案级别添加。似乎还要求它位于“Solution Items”文件夹中。可以选择单独定义所需的嵌套设置。而不是使用所有现有默认设置创建新文件,只要您设置 "root": false - 实质上是将设置附加到现有默认配置。 这似乎在 VS2022 中被破坏了 :(【参考方案2】:

支持@phihi 的答案。

@phihi 的解决方案确实实际上适用于 .NET Core 3.1 库;但除此之外,必须在 solution 级别添加一个 .filenesting.json 文件。似乎还要求新的 .filenesting.json 位于解决方案级别的“Solution Items”文件夹中(文件夹名称可能无关紧要)。

可以选择单独定义所需的嵌套设置。而不是使用所有现有默认设置创建新文件,只要您设置“root”:false - 这实际上将设置附加到现有默认配置而不会丢失任何默认设置。

大成功?

【讨论】:

也适用于 .NET 5.0。非常好! @Mat 感谢您的验证! 这不适用于带有 .NET 5.0 的 Class Library。 (Microsoft Visual Studio Community 2019 版本 16.11.0) 在 VS Community 2022 RC3 中也不适合我。我的文件存储在解决方案旁边,添加了一个解决方案项目,内容设置为与屏幕截图相同的内容,但在我的情况下它是 .Records.cs @NathanAldenSr 您提到您的 filenesting.json 文件存储在解决方案旁边;而 is 应该在解决方案之内,但在任何项目之外……这就是你的意思吗?仍然无法正常工作?我还没有在 VS 2022 中验证这一点。

以上是关于文件嵌套不适用于类或共享库项目的主要内容,如果未能解决你的问题,请参考以下文章

Webpack 模块联合不适用于急切的共享库

文件上传到 azure 文件共享不适用于更大的文件

Laravel 和 Lumen ACL 与共享代码库

LInux中共享库的嵌套调用例子

如何为具有共享代码库的多个项目正确设置 git?

Xcode自动补全不适用于通过CMake包含的C ++库