在Visual Studio中对文件进行分组


78

我正在整理Visual Studio中的项目布局,我想知道是否存在将.xml文件与同名.cs文件相关联的任何hack,插件或技巧,因此它们在我的解决方案导航器中分组显示/资源管理器。

类似于将代码隐藏文件与其aspx关联的方式。

替代文字

任何建议欢迎。谢谢


相关:有关如何在.NET Core项目中嵌套(分组)文件的信息,请参见此答案.cs
DavidRR

Answers:


72

在您的项目文件中:

<Compile Include="FileA.cs"/>
<Compile Include="FileA.xml">
  <DependentUpon>FileA.cs</DependentUpon>
</Compile>

或者,您可以使用VSCommands 2010扩展程序的Group Items命令。

编辑:以防万一您的文件位于文件夹中,请不要在DependentUpon标签中包含文件夹名称。例如,如果您的文件位于Helpers文件夹中:

<Compile Include="Helpers\FileA.cs"/>
<Compile Include="Helpers\FileA.xml">
  <DependentUpon>FileA.cs</DependentUpon>
</Compile>

2
完善!我真的没想到有可能
mat-mcloughlin

我发现在VS2010 VB项目中,如果您尝试向XAML控件添加子类(例如,部分类),则除非选择“显示所有文件”,否则子文件将被隐藏。令人困惑,因此只需将.xaml.vb添加到它的末尾,然后显示它。
罗克兰

1
在看到这篇文章之前,我对如何使用VSCommands Group函数感到困惑。要使用VSCommands分组功能,请突出显示要分组的所有文件,然后右键单击其中任何一个,然后单击分组。
克里斯(Chris)

1
@Julien,当我要否决该提案时,我对此进行了更好的考虑,因为从技术上讲,这确实嵌套文件,这就是问题所在。大多数人都不知道,也是我最初对downvote做出反应的灵感,因为这样做破坏了VS重命名文件的能力。有关更多信息以及为什么我们最终决定不这样做,请参见此处的答案。
Mark A. Donohoe 2015年

对于VS2017,我必须使用<Compile Update =“ FileA.xml” DependentUpon =“ FileA.cs” />
Jamie Burns


2

对于文件是“顶级”文件的简单情况,Julien的描述非常有效。但是,如果DependentUpon文件位于项目下的Folder中,则外观会有所不同。我个人不喜欢它,因为它似乎可能导致歧义,但这是一种观点。

<Compile Include="DataStructs\CKDTree.cs" />
<Compile Include="DataStructs\CClosestObjects.cs" >
    <DependentUpon>CKDTree.cs</DependentUpon>
</Compile>

请注意,从属项不包括父项的文件夹。这在VS2013中是正确的……在早期版本中可能是正确的,但我尚未对其进行验证。


谢谢,“丢失”文件夹位是个好消息。想知道为什么在VS2013中无法正确启动。
John Korsnes 2014年

我认为并不需要它,因为它假设相关的“父”文件(sans路径)是“子”文件的同级,并且子代确实指定了路径。一个简单的测试,即在另一个位置添加第二个CKDTree.cs文件,然后在另一个位置创建一个子DependentUpon元素却具有相同元素的子元素,可以证实这一假设。但是,正如我在下面的答案中所指出的那样,这破坏了VS重命名文件的能力,因此请谨慎行事。
马克·A·多诺霍

1

Visual Studio的文件嵌套扩展是一个很好的扩展。在撰写此答案时,它的下载量约为50万。我个人将其添加到了VS 2015中,并且运行良好(尚未在VS 2017中尝试过)。


0

不知道人们是否知道,但是这样嵌套文件似乎破坏了VS重命名根文件的能力,至少在新的嵌套文件也是局部类的情况下。例如,这是我们创建的树...

MainWindow.xaml
    MainWindow.xaml.cs
    MainWindow.Commands.cs

MainWindow.Commands.cs只是MainWindow的另一个子类,与MainWindow.xaml.cs相同。但是,如果您随后尝试重命名MainWindow.xaml,而不是自动重命名从属文件,它将引发异常。

为了完整起见,我还尝试命名该文件,MainWindow.xaml.Commands.cs但这也不起作用。

当然,没有额外的“命令”文件,重命名可以很好地工作。

MainWindow.xaml
    MainWindow.xaml.cs

无论如何,这足以让我们放弃这样的嵌套文件。没有重命名的能力,那是不值得的。


我只是用部分类(1个根,2个孩子)进行了测试,但重命名根没有任何错误。VS 2015
ATD

我将不得不再次检查2015年。我想我当时使用的是2012/3
Mark A. Donohoe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.