Решение Visual Studio — Есть ли способ создать «специальную» папку?

#visual-studio-2010 #msbuild #project #special-folders #solution-explorer

#visual-studio-2010 #msbuild #проект #специальные папки #решение-проводник

Вопрос:

В принципе, я хочу, чтобы одна из моих папок отображалась над другими папками как тип «специальной папки», аналогично тому, как свойства имеют свое собственное специальное место, даже если это папка, то же самое с App_Data и т.д.

Возможно ли это?

Комментарии:

1. Обычно я создаю папку с решением.

2. Вы хотите это на уровне решения или на уровне проекта?

3. Папки с решениями отсортированы в алфавитном порядке.

4. Если допустимо указывать первую папку «non-special», вы всегда можете начать название с подчеркивания. Как указал Джеймс, папки отсортированы в алфавитном порядке.

Ответ №1:

По умолчанию Visual Studio не поддерживает добавление специальных папок проекта. Папка Properties жестко запрограммирована на то, чтобы вести себя так, как она ведет.

Однако с помощью кода возможно все. Вы могли бы создать расширение для этого, но это было бы непросто. Вероятно, вам придется повозиться с IVsHierarchy или даже реализовать подтип проекта.

Ответ №2:

В принципе, я хочу, чтобы одна из моих папок отображалась над другими папками как тип «специальной папки», аналогично тому, как свойства имеют свое особое место, даже если это папка, то же самое с App_Data и т.д.

Возможно ли это?

ДА:

  1. Сделайте это вручную через IDE
  2. Напишите свой собственный скрипт для создания / изменения вашего *.sln / *.vcproj

Для (1) «руководства» по решениям в IDE: Solution Explorer , right-click вкл Solution node ==> Add ==> New Solution Folder .

Хотя обычно папки сортируются в алфавитном порядке (я бы вставил начальное подчеркивание, чтобы поместить вашу специальную папку наверх), папки решений, вставленные вручную в моем MSVS2008, оставляют новую папку «вверху», хотя при сортировке в алфавитном порядке она должна была опускаться. Однако папки под a Project (которые называются « Filters «) всегда сортируются в алфавитном порядке и добавляются аналогичным образом щелчком правой кнопки мыши, а затем вы можете изменить их «свойства фильтра» с помощью глобусов имен файлов по своему усмотрению (например, добавить глобус фильтра для « *.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 » открыть файл, чтобы увидеть, что изменилось, и создать свой собственный скрипт. (ИМХО, это самый быстрый и легкий путь, поскольку обычно не существует инструментов для работы с этими файлами.)

Такие инструменты, как CMake и QMake generate *.vcproj / *.sln , но на самом деле не выполняют настройку папки, как вы говорите. Тем не менее, мы также смотрим на их выходные данные, потому что в этих файлах «есть более одного способа что-то делать», и файлы, похоже, содержат множество недокументированных функций для выполнения разных хитрых вещей, которые каким-то образом «обнаружили» эти инструменты (так что вы можете попытаться скопировать их сгенерированный вывод).

Мы нашли .NET API для работы с этими файлами — это слишком много работы, и на самом деле они не предназначены для такого типа манипуляций, но YMMV.

Комментарии:

1. >> в основном недокументированный XML, поэтому вам придется поэкспериментировать<< Файлы проекта и решения для Visual Studio 2005 являются файлами MSBuild. Взламывать нечего.

2. >> файлы, похоже, имеют много недокументированных функций для выполнения разных хитрых вещей, которые каким-то образом «обнаружили» эти инструменты << Эти недокументированные функции являются функциями MSBuild.

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

4. @sprite — приятно знать, спасибо (я подумал, что поведение VS2008 было странным, чтобы не сортировать)

5. Есть еще одна проблема — он спрашивает о добавлении специальных папок в проект (например, папку «Свойства» в проекте). Вы говорите о добавлении специальных папок для решения .

Ответ №3:

В VS 2012 есть функция, которую я только что нашел, и она решила эту проблему для меня. Возможно, это не ново для VS.

Создайте папку в проекте с начальным символом «_» (чтобы сначала отсортировать ее).

В свойствах папки установите для «Namespace Provider» значение false.

Анализ кода VS (или ReSharper?) тогда не жалуется на то, что «пространство имен не соответствует расположению файла», что было источником раздражения для меня, которое в противном случае удержало бы меня от этого маршрута.

Ответ №4:

Хотя простого способа добавить не существует Custom Folder , есть простой способ «украсть» Properties пользовательскую папку.

  1. Добавьте в проект обычную папку. Например MyCustomerFolder .

  2. Откройте XML-файл proj. Найти строку

      <AppDesignerFolder>Properties</AppDesignerFolder>
      

    заменить на

      <AppDesignerFolder>MyCustomFolder</AppDesignerFolder>
      
  3. Перезагрузите проект.

  4. Теперь у вас есть пользовательская папка, которая всегда будет располагаться сверху.

    введите описание изображения здесь

Комментарии:

1. Это хороший трюк, но он не сработает, если вы хотите добавить более 1 специальной папки.

2. @Matt — верно. Однако в вопросе четко указано «Я хочу, чтобы одна из моих папок отображалась над другими папками».

3. Да, вы правы. Хотя это также было бы проблемой, если бы ему действительно нужно было использовать папку App Designer и он хотел бы сохранить ее независимой от своей «специальной папки».

4. Хороший трюк, но да … это не решает проблему создания дополнительной специальной папки.