Вложение файлов в обозревателе решений
Обозреватель решений вкладывает связанные файлы, чтобы упорядочить их и упростить их поиск. Например, если добавить в проект форму Windows Forms, файл с кодом формы вкладывается под формой в обозревателе решений. В проектах .NET Core (и .NET 5 и более поздних версий) вложенные файлы можно сделать еще дальше. Можно выбрать одну из предустановок вложения файлов — Отключено, По умолчанию и Интернет. Вы также можете настроить вложение файлов или создать параметры для определенного решения или проекта.
В 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.* в file.js.
- fileToFile: этот тип правила используется для вложения bower.json в .bowerrc.
Поставщик extensionToExtension
Этот поставщик позволяет определить правила вложения файлов на основе определенных расширений файлов. Рассмотрим следующий пример:


- Файл cart.js вложен в cart.ts из-за первого правила extensionToExtension.
- Файл cart.js не вложен в cart.tsx, так как .ts предшествует .tsx в правилах, и может существовать только один родительский элемент.
- Файл light.css вложен в light.sass из-за второго правила extensionToExtension.
- Файл home.html вложен в home.md из-за третьего правила extensionToExtension.
Поставщик fileSuffixToExtension
Этот поставщик работает так же, как поставщик extensionToExtension. Единственное отличие заключается в том, что правило отслеживает суффикс файла, а не только расширение. Рассмотрим следующий пример:


- Файл portal-vsdoc.js вложен в portal.js из-за правила fileSuffixToExtension.
- каждый аспект правила работает так же, как extensionToExtension
Поставщик addedExtension
Этот поставщик выполняет вложение файлов с дополнительным расширением в файл без дополнительного расширения. Дополнительное расширение может использоваться только в конце полного имени файла.
Рассмотрим следующий пример:


- Файл file.html.css вложен в file.html из-за правила addedExtension.
Вам не нужно указывать расширения файлов для правила addedExtension — оно автоматически применяется ко всем расширениям. То есть любой файл с таким же именем и расширением, что и другой файл, но с дополнительным расширением, будет вложен в другой файл. Вы не можете ограничить действия поставщика только определенными расширениями файлов.
Поставщик pathSegment
Этот поставщик выполняет вложение файлов с дополнительным расширением в файл без дополнительного расширения. Дополнительное расширение может использоваться только в середине полного имени файла.
Рассмотрим следующий пример:


- Файл jquery.min.js вложен в jquery.js из-за правила pathSegment.
- Если вы не указали определенные расширения файлов для правила pathSegment , оно применяется ко всем расширениям. То есть любой файл с таким же именем и расширением, что и другой файл, но с дополнительным расширением в середине, будет вложен в другой файл.
- Вы можете ограничить действие правила pathSegment определенными расширениями файлов, указав их следующим образом:
"pathSegment": < "add": < ".*": [ ".js", ".css", ".html", ".htm" ] >>
Поставщик allExtensions
Этот поставщик позволяет определить правила вложения файлов для файлов с любым расширением, но одним и тем же базовым именем. Рассмотрим следующий пример:


- Файлы template.cs и template.doc вложены в template.tt из-за правила allExtensions.
Поставщик fileToFile
Этот поставщик позволяет определить правила вложения файлов на основе полных имен файлов. Рассмотрим следующий пример:


- Файл .bowerrc вложен в bower.json из-за правила fileToFile.
Порядок правил
Порядок важен в каждой части пользовательского файла параметров. Вы можете изменить порядок, в котором выполняются правила, перемещая их вверх или вниз в узле dependentFileProvider. Например, если у вас есть одно правило, которое делает file.js родителем file.ts, и еще одно правило, которое делает file.coffee родителем file.ts, порядок, в котором они отображаются в файле, определяет поведение вложения при наличии всех трех файлов. Поскольку file.ts может иметь только один родительский элемент, им становится тот файл, правило которого выполняется первым.
Порядок также важен для самих разделов правила, а не только для файлов в разделе. Как только обнаруживается соответствие пары файлов правилу вложения, другие правила ниже по иерархии пропускаются и обрабатывается следующая пара файлов.
Кнопка вложения файлов
Всеми параметрами, включая ваши собственные, можно управлять с помощью одной кнопки в обозревателе решений:

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

Параметры для конкретного решения и проекта объединяются с активными параметрами Visual Studio. Например, у вас может быть пустой файл параметров для конкретного проекта, однако обозреватель решений по-прежнему будет применять вложение файлов. Поведение вложения определяется параметрами для конкретного решения или параметрами Visual Studio. Приоритетом для объединения параметров вложения файлов является проект решения > Visual Studio>.
В Visual Studio можно настроить пропуск параметров для конкретного решения и проекта (даже если файлы существуют на диске), включив параметр Пропускать параметры проекта и решения в разделе меню Сервис>Параметры>ASP.NET Core>Вложение файлов.
Кроме того, можно, напротив, указать Visual Studio на необходимость использования только параметров для конкретного решения или проекта, задав для корневого узла значение true. Visual Studio прекратит объединение файлов параметров на этом уровне и не будет сочетать их с файлами выше по иерархии.
Параметры для конкретного решения и проекта можно зарегистрировать в системе управления версиями, и вся команда, работающая с базой кода, может использовать их совместно.
Отключение правил вложения файлов для проекта
Существующие глобальные правила вложения файлов для конкретных решений или проектов можно отключить с помощью действия удаления для поставщика, вместо действия добавления. Например, если добавить следующий код параметров в проект, все правила pathSegment, которые могут существовать глобально для этого проекта, будут отключены:
"dependentFileProviders": < "remove": < "pathSegment": <>> >
Связанный контент
- Персонализация интегрированной среды разработки
- Решения и проекты в Visual Studio
Как добавить обозреватель решений в visual studio



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Расширение фильтра Обозреватель решений
Вы можете расширить функциональные возможности фильтра Обозреватель решений для отображения или скрытия разных файлов. Например, можно создать фильтр, отображающий только файлы фабрики классов C# в Обозреватель решений, как показано в этом пошаговом руководстве.
Создание проекта пакета Visual Studio
- Создайте проект VSIX с именем FileFilter . Добавьте пользовательский шаблон элемента командной строки с именем FileFilter. Дополнительные сведения см. в разделе «Создание расширения» с помощью команды меню.
- Добавьте ссылку на System.ComponentModel.Composition и Microsoft.VisualStudio.Utilities .
- Выберите команду меню на панели инструментов Обозреватель решений. Откройте файл FileFilterPackage.vsct.
- Измените блок следующим образом:
Обновление файла манифеста
- В файле source.extension.vsixmanifest добавьте ресурс, который является компонентом MEF.
- На вкладке «Активы» нажмите кнопку «Создать «.
- В поле «Тип« выберите Microsoft.VisualStudio.MefComponent.
- В поле «Источник« выберите проект в текущем решении.
- В поле «Проект» выберите FileFilter и нажмите кнопку «ОК«.
Добавление кода фильтра
- Добавьте некоторые идентификаторы GUID в файл FileFilterPackageGuids.cs :
public const string guidFileFilterPackageCmdSetString = "00000000-0000-0000-0000-00000000"; // get your GUID from the .vsct file public const int FileFilterId = 0x100;
using System; using System.Collections.Generic; using System.ComponentModel.Composition; using System.Text.RegularExpressions; using System.Threading.Tasks; using Microsoft.Internal.VisualStudio.PlatformUI; using Microsoft.VisualStudio.Shell; namespace FileFilter < // Implements ISolutionTreeFilterProvider. The SolutionTreeFilterProvider attribute declares it as a MEF component [SolutionTreeFilterProvider(FileFilterPackageGuids.guidFileFilterPackageCmdSetString, (uint)(FileFilterPackageGuids.FileFilterId))] public sealed class FileNameFilterProvider : HierarchyTreeFilterProvider < SVsServiceProvider svcProvider; IVsHierarchyItemCollectionProvider hierarchyCollectionProvider; // Constructor required for MEF composition [ImportingConstructor] public FileNameFilterProvider(SVsServiceProvider serviceProvider, IVsHierarchyItemCollectionProvider hierarchyCollectionProvider) < this.svcProvider = serviceProvider; this.hierarchyCollectionProvider = hierarchyCollectionProvider; >// Returns an instance of Create filter class. protected override HierarchyTreeFilter CreateFilter() < return new FileNameFilter(this.svcProvider, this.hierarchyCollectionProvider, FileNamePattern); >// Regex pattern for CSharp factory classes private const string FileNamePattern = @"\w*factory\w*(.cs$)"; // Implementation of file filtering private sealed class FileNameFilter : HierarchyTreeFilter < private readonly Regex regexp; private readonly IServiceProvider svcProvider; private readonly IVsHierarchyItemCollectionProvider hierarchyCollectionProvider; public FileNameFilter( IServiceProvider serviceProvider, IVsHierarchyItemCollectionProvider hierarchyCollectionProvider, string fileNamePattern) < this.svcProvider = serviceProvider; this.hierarchyCollectionProvider = hierarchyCollectionProvider; this.regexp = new Regex(fileNamePattern, RegexOptions.IgnoreCase); >// Gets the items to be included from this filter provider. // rootItems is a collection that contains the root of your solution // Returns a collection of items to be included as part of the filter protected override async Task GetIncludedItemsAsync(IEnumerable rootItems) < IVsHierarchyItem root = HierarchyUtilities.FindCommonAncestor(rootItems); IReadOnlyObservableSetsourceItems; sourceItems = await hierarchyCollectionProvider.GetDescendantsAsync( root.HierarchyIdentity.NestedHierarchy, CancellationToken); IFilteredHierarchyItemSet includedItems = await hierarchyCollectionProvider.GetFilteredHierarchyItemsAsync( sourceItems, ShouldIncludeInFilter, CancellationToken); return includedItems; > // Returns true if filters hierarchy item name for given filter; otherwise, false private bool ShouldIncludeInFilter(IVsHierarchyItem hierarchyItem) < if (hierarchyItem == null) < return false; >return this.regexp.IsMatch(hierarchyItem.Text); > > > >
private FileFilter(Package package) < if (package == null) < throw new ArgumentNullException("package"); >this.package = package; >
protected override void Initialize() < Debug.WriteLine (string.Format(CultureInfo.CurrentCulture, "Entering Initialize() of: ", this.ToString())); base.Initialize(); >
Тестирование кода
- Постройте и запустите проект. Откроется второй экземпляр Visual Studio. Это называется экспериментальным экземпляром.
- В экспериментальном экземпляре Visual Studio откройте проект C#.
- Найдите кнопку, добавленную на панели инструментов Обозреватель решений. Она должна быть четвертой кнопкой слева.
- При нажатии кнопки все файлы должны быть отфильтрованы, и вы увидите, что все элементы отфильтрованы из представления. В Обозреватель решений.
Добавление команды на панель инструментов Обозреватель решений
В этом пошаговом руководстве показано, как добавить кнопку на панель инструментов Обозреватель решений.
Любая команда на панели инструментов или меню вызывается кнопкой в Visual Studio. При нажатии кнопки выполняется код в обработчике команд. Как правило, связанные команды группируются в одну группу. Меню или панели инструментов служат контейнерами для групп. Приоритет определяет порядок, в котором отдельные команды в группе отображаются в меню или на панели инструментов. Вы можете запретить отображение кнопки на панели инструментов или меню, управляя видимостью. Команда, указанная в разделе VSCT-файла , отображается только в связанном контексте. Видимость нельзя применить к группам.
Дополнительные сведения о меню, командах панели инструментов и vsct-файлах см. в разделе «Команды», меню и панели инструментов.
Используйте файлы таблицы команд XML (VSCT) вместо файлов конфигурации таблицы команд (CTC), чтобы определить способ отображения меню и команд в VSPackages. Дополнительные сведения см. в командной таблице Visual Studio (. Файлы Vsct).
Создание расширения с помощью команды меню
Создайте проект VSIX с именем SolutionToolbar . Добавьте шаблон элемента команды меню с именем ToolbarButton. Сведения о том, как это сделать, см. в разделе «Создание расширения» с помощью команды меню.
Добавление кнопки на панель инструментов Обозреватель решений
В этом разделе пошагового руководства показано, как добавить кнопку на панель инструментов Обозреватель решений. При нажатии кнопки выполняется код в методе обратного вызова.
-
В файле ToolbarButtonPackage.vsct перейдите в раздел. Узел содержит группу меню и команду, созданную шаблоном пакета. Добавьте элемент на этот узел, чтобы объявить группу, в которой будет храниться ваша команда.
Управление видимостью кнопки
В этом разделе пошагового руководства показано, как управлять видимостью кнопки на панели инструментов. Установив контекст для одного или нескольких проектов в разделе файла SolutionToolbar.vsct , кнопка будет отображаться только при открытии проекта или проектов.
Отображение кнопки при открытии одного или нескольких проектов
- В разделе ToolbarButtonPackage.vsct добавьте два флага команд в существующий элемент между тегами и тегами.
DefaultInvisible DynamicVisibility