Visual Studio 解决方案——有啥方法可以创建一个“特殊”文件夹?

Posted

技术标签:

【中文标题】Visual Studio 解决方案——有啥方法可以创建一个“特殊”文件夹?【英文标题】:Visual Studio Solution -- Any way to create a "special" folder?Visual Studio 解决方案——有什么方法可以创建一个“特殊”文件夹? 【发布时间】:2011-09-06 08:52:52 【问题描述】:

基本上,我希望我的一个文件夹作为一种“特殊文件夹”出现在其他文件夹之上,类似于 Properties 有它自己的特殊位置,即使它是一个文件夹,与 App_Data 等相同。

这可能吗?

【问题讨论】:

我通常会创建一个解决方案文件夹。 您想要在解决方案级别还是项目级别? 解决方案文件夹按字母顺序排序。 如果是第一个“非特殊”文件夹是可以接受的,您始终可以使用下划线开头的名称。正如詹姆斯指出的那样,这些文件夹按字母顺序排序。 【参考方案1】:

VS 2012 有一个我刚刚发现的功能,它为我解决了这个问题。对 VS 来说可能并不陌生。

在项目下创建一个带有前导“_”的文件夹(首先对其进行排序)。

在文件夹的属性中,将“Namespace Provider”设置为 false。

VS(或 ReSharper?)代码分析不会抱怨“命名空间与文件位置不匹配”,这对我来说是恼火的根源,否则会阻止我走这条路。

【讨论】:

【参考方案2】:

虽然添加Custom Folder没有简单的方法,但有一种简单的方法可以“窃取”Properties自定义文件夹。

    在项目中添加一个常规文件夹。例如MyCustomerFolder

    打开项目文件 xml。找线

     <AppDesignerFolder>Properties</AppDesignerFolder>
    

    替换为

     <AppDesignerFolder>MyCustomFolder</AppDesignerFolder>
    

    重新加载项目。

    现在您已经有了一个自定义文件夹,它将始终位于顶部。

【讨论】:

这是一个不错的技巧,但如果你想添加超过 1 个特殊文件夹,这将不起作用。 @Matt - 是的。但是,问题清楚地表明“我希望我的一个文件夹出现在其他文件夹之上”。 是的,你是对的。虽然如果他确实需要使用 App Designer 文件夹并希望使其独立于他的“特殊文件夹”,这也是一个问题。 不错的技巧,但是是的...这并不能解决生成额外的特殊文件夹的问题。【参考方案3】:

基本上,我希望我的一个文件夹 出现在其他文件夹上方 “特殊文件夹”的类型,类似于 属性如何有它自己的特殊性 即使它是一个文件夹,也一样 与 App_Data 等。

这可能吗?

是的:

    通过 IDE 手动执行 编写您自己的脚本 生成/修改您的*.sln/*.vcproj

对于 (1) IDE 中解决方案的“手动”:Solution Explorerright-click Solution node==>Add==>New Solution Folder

虽然文件夹通常按字母顺序排序(我会插入一个前导下划线以强制您的特殊文件夹位于顶部),但在我的 MSVS2008 上手动插入的解决方案文件夹会将新文件夹留在“顶部”,即使它应该有按字母顺序排序时会下降。但是,Project 下的文件夹(称为“Filters”)始终按字母顺序排序,并通过右键单击类似地添加,然后您可以使用文件名 glob 修改它们的“过滤器属性”以获得所需的内容在那里(例如,为“*.MY_EXTENSION1;*.MY_EXTENSION2”添加一个过滤器)。

我们选择了 (2),并生成了自己的 *.sln*.vcproj,并添加了我们自己的文件夹/过滤器。我在网上没有看到任何实用程序来帮助解决这个问题(所以我们必须自己编写)。对格式进行逆向工程并不难,但它主要是未记录的 XML,因此您必须进行试验。只有几篇很好的网络文章解释了文件中的内容,比如这篇:

http://tim.oreilly.com/pub/a/dotnet/excerpt/vshacks_chap1/index.html?page=4

在“好的一面”,文件只是 XML,因此在开发我们的脚本时,我们只是通过 IDE 进行更改、保存并比较“差异”以获得我们想要的更改。这些更改是我们修改文件时脚本插入的内容。因此,如果您手动修改文件,您可以类似地“diff”文件查看更改内容,并制作您自己的脚本。 (恕我直言,这是最快和最简单的方法,因为通常不存在用于操作这些文件的工具。)

CMakeQMake 之类的工具会生成 *.vcproj/*.sln,但不要像您说的那样真正进行文件夹自定义。但是,我们也会查看它们的输出,因为在这些文件中“做事的方法不止一种”,而且这些文件似乎有许多未记录的功能,用于执行这些工具以某种方式“发现”的不同聪明的事情(所以你可以尝试复制他们生成的输出)。

我们发现 .NET API 处理这些文件的工作量太大,而且并不是真正为这种类型的操作而设计的,而是 YMMV。

【讨论】:

>>大部分未记录的 XML,因此您必须进行试验 >>这些文件似乎有许多未记录的功能,用于执行这些工具以某种方式“发现”的不同聪明的事情 这不适用于 VS2010。 VS2008 有一个错误导致项目按照它们在项目文件中的顺序排列。不久前,我为自己和我的团队伙伴编写了一个小工具,以按字母顺序对 .sln 文件中的项目进行排序以解决此问题。 VS2010 修复了这种行为,所以如果你要命名,你将不得不使用一些下划线技巧或类似的技巧。 @sprite -- 很高兴知道,谢谢(我认为不排序的 VS2008 行为很奇怪) 还有另一个问题 - 他询问如何将特殊文件夹添加到 项目(例如项目中的“Properties”文件夹)。您正在谈论添加特殊的 solution 文件夹。【参考方案4】:

默认情况下,Visual Studio 不支持添加特殊项目文件夹。 Properties 文件夹是硬编码的,可以按照它的方式运行。

但是,使用代码一切皆有可能。您可以构建一个扩展来执行此操作,但这并不简单。您可能需要弄乱IVsHierarchy 甚至实现project subtype。

【讨论】:

以上是关于Visual Studio 解决方案——有啥方法可以创建一个“特殊”文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

我使用 Visual Studio 2017 制作的 UWP JS 应用程序不会打印 JavaScript 生成的数字。这有啥原因或解决方法吗?

使用 Visual Studio 11 编译的可执行文件有啥特别之处导致无法在 Windows XP 上执行?

Visual Studio 2015 各个版本有啥区别

有啥方法可以在 C#/Visual Studio 的断点上睡觉?

Visual Studio Code - 有啥方法可以分别突出显示不同类型的错误和警告?

有啥方法可以在 NVIDIA 显卡上的 Visual Studio 中运行程序调试?