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

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

这可能吗?

【问题讨论】:

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

标签: visual-studio-2010 msbuild project special-folders solution-explorer


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    2. 打开项目文件 xml。找线

       <AppDesignerFolder>Properties</AppDesignerFolder>
      

      替换为

       <AppDesignerFolder>MyCustomFolder</AppDesignerFolder>
      
    3. 重新加载项目。

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

    【讨论】:

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

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

    这可能吗?

    是的:

    1. 通过 IDE 手动执行
    2. 编写您自己的脚本 生成/修改您的*.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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多