Поделиться через


Вложение файлов в обозревателе решений

Обозреватель решений группирует связанные файлы, чтобы помочь упорядочивать их и упростить поиск. Например, если вы добавляете форму Windows Forms в проект, файл кода формы вложен под формой в обозревателе решений. В проектах на основе .NET Core (и более поздние версии) вложенность файлов можно развивать дальше. Вы можете выбрать между предустановками вложения файлов Off, Default и Web. Вы также можете настроить вложенные файлы или создать параметры, относящиеся к решению, и для конкретных проектов.

Замечание

В Visual Studio 2022 версии 17.2 и более ранних версиях эта функция была поддерживается только для проектов ASP.NET Core. Начиная с версии 17.3, все проекты, нацеленные на .NET, поддерживают вложенность файлов.

Параметры вложения файлов

Кнопка включения и выключения вложения файлов

Доступные варианты вложения файлов без настройки:

  • Выкл: Этот параметр предоставляет плоский список файлов без вложенности.

  • По умолчанию: этот параметр позволяет использовать поведение вложения файлов по умолчанию в обозревателе решений. Если параметры для заданного типа проекта отсутствуют, то файлы в проекте не будут вложены. Если существуют параметры (например, для веб-проекта), применяется вложенность.

  • Веб. Этот параметр применяет поведение вложения веб-файлов ко всем проектам в текущем решении. Он имеет множество правил, и мы рекомендуем вам проверить его и рассказать нам, что вы думаете. На следующем снимке экрана показаны лишь несколько примеров поведения вложенности файлов, доступного при выборе этого параметра.

    Структурирование файлов в Проводнике решений

Настройка вложенности файлов

Если вам не нравится то, что вы получаете по умолчанию, вы можете создать собственные настраиваемые параметры вложения файлов, которые указывают Обозревателю решений, как вкладывать файлы. Вы можете добавить столько пользовательских параметров вложения файлов, сколько вы хотите, и вы можете переключаться между ними по мере необходимости. Чтобы создать новый настраиваемый параметр, можно начать с пустого файла или использовать веб-параметры в качестве отправной точки:

Добавление настраиваемых правил вложения файлов

Мы рекомендуем использовать веб-параметры в качестве отправной точки, так как проще работать с тем, что уже работает. При использовании веб-параметров в качестве отправной точки файл .filenesting.json выглядит следующим образом:

Использование существующих правил вложения файлов в качестве основы для пользовательских параметров

Давайте сосредоточимся на узле dependentFileProviders и его дочерних узлах. Каждый дочерний узел — это тип правила, который Visual Studio может использовать, чтобы вложить файлы. Например, когда у файла одно и то же имя, но другое расширение это один из типов правил. Доступные правила:

  • extensionToExtension: используйте этот тип правила для вложения file.js в file.ts

  • fileSuffixToExtension: используйте этот тип правила для вложения file-vsdoc.js в file.js

  • addedExtension: используйте этот тип правила для вложения file.html.css в file.html

  • pathSegment: используйте этот тип правила для вложения jquery.min.js в jquery.js

  • allExtensions: используйте этот тип правила для вложения файла.* под file.js

  • fileToFile: используйте этот тип правила, чтобы вложить bower.json под .bowerrc

Поставщик ExtensionToExtension

Этот поставщик позволяет определить правила вложения файлов с помощью определенных расширений файлов. Рассмотрим следующий пример:

Примеры правил extentionToExtension

Пример эффекта ExtensionToExtension

  • cart.js вложено в cart.ts в соответствии с первым правилом extensionToExtension

  • cart.js не вложено в cart.tsx, потому что .ts идет перед .tsx в правилах, и может быть только один родитель.

  • light.css вложена в light.sass из-за второго правила extensionToExtension

  • home.html вложено в home.md из-за третьего правила extensionToExtension

Поставщик fileSuffixToExtension

Этот поставщик работает так же, как и поставщик extensionToExtension , причем единственное различие заключается в том, что правило смотрит на суффикс файла вместо расширения. Рассмотрим следующий пример:

Примеры правил fileSuffixToExtension

Пример эффекта fileSuffixToExtension

  • portal-vsdoc.js вложен под portal.js из-за правила fileSuffixToExtension

  • все остальные аспекты правила работают так же, как extensionToExtension

Поставщик addedExtension

Этот поставщик организует файлы с дополнительным расширением под файлы без дополнительного расширения. Дополнительное расширение может отображаться только в конце полного имени файла.

Рассмотрим следующий пример:

Примеры правил addedExtension

Пример эффекта addedExtension

  • file.html.css вложен в file.html из-за правила addedExtension

Замечание

Вы не указываете расширения файлов для addedExtension правила. Он автоматически применяется ко всем расширениям файлов. То есть любой файл с тем же именем и расширением, что и у другого файла, но с дополнительным расширением на конце вложен под другой файл. Вы не можете ограничить эффект этого поставщика только определенными расширениями файлов.

Поставщик pathSegment

Этот поставщик вкладывает файлы с дополнительным расширением в файлы без дополнительного расширения. Дополнительное расширение может отображаться только в середине полного имени файла.

Рассмотрим следующий пример:

Примеры правил pathSegment

Пример эффекта pathSegment

  • jquery.min.js вложено в jquery.js из-за правила pathSegment

Замечание

  • Если для правила не указаны определенные расширения pathSegment файлов, он применяется ко всем расширениям файлов. То есть любой файл с тем же именем и расширением, что и у другого файла, но с дополнительным расширением посередине, вкладывается под этот файл.

  • Вы можете ограничить эффект pathSegment правила определенными расширениями файлов, указав их следующим образом:

    "pathSegment": {
        "add": {
          ".*": [
            ".js",
            ".css",
            ".html",
            ".htm"
          ]
        }
    }
    

Поставщик allExtensions

Этот поставщик позволяет определить правила вложения файлов с любым расширением, но одинаковым именем базового файла. Рассмотрим следующий пример:

Примеры правил allExtensions

Пример эффекта allExtensions

  • template.cs и template.doc вложены в template.tt из-за правила allExtensions .

Поставщик fileToFile

Этот поставщик позволяет определять правила вложения файлов на основе всех имен файлов. Рассмотрим следующий пример:

Примеры правил fileToFile

Пример эффекта fileToFile

  • .bowerrc вложен в bower.json из-за правила fileToFile

Порядок правил

Порядок важен в каждой части файла пользовательских параметров. Порядок выполнения правил можно изменить, перемещая их вверх или вниз внутри узла dependentFileProvider. Например, если у вас есть одно правило, которое делает file.js родительским элементом file.ts и другим правилом, которое делает file.coffee родительским элементом file.ts, порядок их отображения в файле определяет поведение вложения при наличии всех трех файлов. Поскольку file.ts может иметь только одного родителя, которое правило выполняется первым, то оно и победит.

Порядок также важен для разделов правил, а не только для файлов в разделе. Как только пара файлов соотносится с правилом вложения файлов, остальные правила, расположенные ниже, игнорируются, и следующая пара файлов обрабатывается.

Кнопка вложения файла

Вы можете управлять всеми параметрами, включая собственные пользовательские параметры, с помощью одной кнопки в обозревателе решений:

Активация пользовательских правил вложения файлов

Создание параметров для конкретного проекта

Вы можете создавать параметры для конкретного решения и проекта с помощью контекстного меню (контекстное меню) каждого решения и проекта:

Правила группировки для решений и специфичных проектов

Параметры для конкретного решения и конкретного проекта объединяются с активными параметрами Visual Studio. Например, у вас может быть пустой файл параметров для конкретного проекта, но Обозреватель решений по-прежнему группирует файлы. Поведение вложенности определяется параметрами Visual Studio или параметрами, относящимися к решению. Приоритетом для объединения параметров вложения файлов является проект решения > Visual Studio>.

Вы можете указать Visual Studio использовать параметры, относящиеся только к решению или только к проекту, задав узлу корневой значение true. Visual Studio останавливает слияние файлов на этом уровне и не объединяет его с файлами выше иерархии.

Параметры, связанные с решением и конкретным проектом, можно проверить в системе управления версиями, и вся команда, которая работает в базе кода, может поделиться ими.

Отключите правила вложения файлов для проекта

Вы можете отключить существующие правила вложения глобальных файлов для определенных решений или проектов, используя действие удаления для поставщика вместо добавления. Например, если добавить в проект следующий код параметров, все правила pathSegment , которые могут существовать глобально для этого конкретного проекта, отключены:

"dependentFileProviders": {
  "remove": {
    "pathSegment": {}
  }
}