В принципе, я хочу, чтобы одна из моих папок отображалась над другими папками как тип "специальной папки", аналогично тому, как у Свойства есть свое особое место, даже если это папка, то же самое с App_Data и т.д.
Возможно ли это?
В принципе, я хочу, чтобы одна из моих папок отображалась над другими папками как тип "специальной папки", аналогично тому, как у Свойства есть свое особое место, даже если это папка, то же самое с App_Data и т.д.
Возможно ли это?
По умолчанию Visual Studio не поддерживает добавление специальных папок проекта. Папка "Свойства" жестко закодирована, чтобы вести себя так, как она делает.
Однако с кодом возможно все. Вы могли бы построить расширение, чтобы сделать это, но это было бы непросто. Вам, вероятно, нужно будет возиться с IVsHierarchy
или даже реализовать подтип проекта .
В принципе, я хочу, чтобы одна из моих папок появляются над другими папками как тип "специальной папки", аналогичный как у свойств есть собственный даже если это папка, то же самое с App_Data и т.д.
Возможно ли это?
Да:
*.sln
/*.vcproj
Для (1) "руководство" по решениям в среде IDE: Solution Explorer
, right-click
on 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, сохранили и сравнили "diff" для того, какое изменение мы хотим. Эти изменения вставляются нашими скриптами при изменении наших файлов. Таким образом, если вы измените файл вручную, вы можете просто "diff
" сохранить файл, чтобы узнать, что изменилось, и создать свой собственный script. (IMHO, это самый быстрый и простой маршрут, поскольку инструментов, как правило, не существует для управления этими файлами.)
Такие инструменты, как CMake
и QMake
сгенерируют *.vcproj
/*.sln
, но на самом деле не делают настройки для настройки папки, как вы говорите. Однако мы также смотрим на их вывод, потому что в этих файлах "есть не один способ сделать что-то", и у файлов, похоже, много недокументированных функций для выполнения разных умных вещей, которые каким-то образом эти инструменты "открыли" (так что вы может попытаться скопировать их сгенерированный вывод).
Мы обнаружили, что .NET API работают с этими файлами как слишком много работы и не предназначены для такого типа манипуляций, но YMMV.
В VS 2012 есть функция, которую я только что нашел, и она решила эту проблему для меня. Это может быть не ново для VS.
Создайте папку под проектом с ведущим "_" (чтобы сначала отсортировать его).
В свойствах папки задайте "Поставщик пространства имен" в значение false.
Анализ кода VS (или ReSharper?) тогда не жалуется, что "пространство имен не совпадает с расположением файла", что стало источником раздражения для меня, которое в противном случае не позволило бы мне пройти этот маршрут.
Хотя нет простого способа добавить Custom Folder
, есть простой способ "украсть" Properties
пользовательскую папку.
MyCustomerFolder
.Откройте файл proj xml. Найти строку
<AppDesignerFolder>Properties</AppDesignerFolder>
заменить
<AppDesignerFolder>MyCustomFolder</AppDesignerFolder>
Теперь у вас есть пользовательская папка, которая всегда будет придерживаться вершины.