Тэг, это ты… Другой способ организовывать файлы в Visual Studio
Если вы читаете это блог, то весьма вероятно, что вы пользуетесь Visual Studio. И подобно большинству разработчиков вам нравится организовывать файлы и каталоги проектов «только таким способом». Но что если вам захочется придерживаться иной организации? Или иметь несколько планов расположения файлов? Не будет ли здорово, если вы сможете отмечать файл меткой и затем просматривать их в соответствии с этими метками? А также применять множество меток, так чтобы иметь несколько представлений для проекта? Например, как бизнес-представление и разработческое представление?
Вас не раздражает то, что вы обязаны просматривать файлы решения способом, предоставляемым Visual Studio? С сегодняшнего дня вы можете просматривать свои файлы гораздо более удобным способом! Начните помечать файлы очень простым способом!
Щелкните правой клавишей мыши на проводнике решений, задайте метки каждому файлу, и затем начните передвигаться по меткам с помощью TagExplorer’а! (View->Other Windows->Tag explorer).
Visual Studio Tags (https://vstags.codeplex.com/)
Взглянем на проект...
public void Tag()
{
IEnumerable<FileItem> selectedItems = envDte.SelectedItems
.OfType<SelectedItem>()
.Select(si => new FileItem {Name = si.Name});
IEnumerable<string> candidateTags = GetCandidateStrings(selectedItems);
IEnumerable<string> tags = selector.Select(candidateTags);
if (!selector.Selected) return;
foreach (SelectedItem rootProjectItem in envDte.SelectedItems.OfType<SelectedItem>())
{
IVsHierarchy hierarchy;
((IVsSolution) solution).GetProjectOfUniqueName(
rootProjectItem.ProjectItem.ContainingProject.UniqueName, out hierarchy);
var buildPropertyStorage = hierarchy as IVsBuildPropertyStorage;
if (buildPropertyStorage != null)
{
uint itemId;
var fullPath =
(string) rootProjectItem.ProjectItem.Properties.Item("FullPath").Value;
hierarchy.ParseCanonicalName(fullPath, out itemId);
string newTags = string.Join(" ", tags);
string currentTags;
buildPropertyStorage.GetItemAttribute(itemId, "Tags", out currentTags);
ApplyTags(currentTags, newTags, buildPropertyStorage, itemId);
}
}
}
Этот проект демонстрирует несколько вещей. Что вам не обязательно довольствоваться тем, как Visual Studio организует ваши файлы, как подключиться к проекту Visual Studio, и, наконец, как создавать распространяемые расширения Visual Studio.