Решение Visual Studio - есть ли способ создать «специальную» папку? - PullRequest
11 голосов
/ 01 июня 2011

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

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

Ответы [ 4 ]

4 голосов
/ 10 июня 2011

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

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

3 голосов
/ 15 июня 2011

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

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

Да

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

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

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

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

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

2 голосов
/ 03 октября 2012

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

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

В свойствах папки установите «Поставщик пространства имен» наложный.

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

1 голос
/ 17 июня 2011

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

  1. Добавить обычную папку в проект.Например MyCustomerFolder.
  2. Открыть файл proj xml.Найти строку

    <AppDesignerFolder>Properties</AppDesignerFolder>
    

    заменить на

    <AppDesignerFolder>MyCustomFolder</AppDesignerFolder>
    
  3. Перезагрузить проект.
  4. Теперь у вас есть пользовательская папка, которая будет всегдапридерживаться вершины.

    enter image description here

...