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

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

Замечание

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

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

Снимок экрана, на котором показана кнопка для включения и отключения вложенности файлов.

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

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

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

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

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

    Скриншот, показывающий вложение файлов в Обозреватель решений.

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

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

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

Снимок экрана: диалоговое окно

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

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

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

Мы рекомендуем использовать веб-параметры в качестве отправной точки, так как проще работать с тем, что уже работает. При использовании веб-параметров в качестве отправной точки файл .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.

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

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

  • file.js вложен в file.ts из-за первого правила extensionToExtension.

  • file.js не вложен в file.tsx , так как .ts идёт раньше .tsx в правилах, и может быть только один родительский элемент.

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

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

Поставщик fileSuffixToExtension

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

Снимок экрана: правило fileSuffixToExtension.

Снимок экрана: эффект правила fileSuffixToExtension.

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

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

  • portal-vsdoc.js вкладывается в portal.js из-за правила fileSuffixToExtension.

  • Каждый другой аспект правила работает так же, как extensionToExtension.

Поставщик addedExtension

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

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

Снимок экрана: правило addedextension.

Снимок экрана, на котором показан эффект правила addedextension.

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

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

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

Замечание

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

Поставщик pathSegment

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

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

Снимок экрана, демонстрирующий правило pathSegment.

Снимок экрана: эффект правила pathSegment.

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

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

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

Замечание

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

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

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

Поставщик allExtensions

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

Снимок экрана, показывающий правило allExtensions.

Снимок экрана: эффект правила allExtensions.

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

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

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

Поставщик fileToFile

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

Снимок экрана: правило fileToFile.

Снимок экрана: эффект правила fileToFile.

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

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

  • file.npmrc вложен в package.json из-за правила fileToFile .

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

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

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

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

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

Снимок экрана: элементы меню для активации пользовательских правил вложения файлов.

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

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

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

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

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

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

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

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

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

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

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