Добавить фильтр в шаблон визуальной студии

Я пытаюсь создать фильтр (одна из маленьких папок, которая делает только отдельные файлы в проекте) в шаблоне проекта Visual Studio (C ++) с помощью мастера, поэтому я пишу следующий код в методе RunStarted:

public void RunStarted(object automationObject,
Dictionary<string, string> replacementsDictionary,
WizardRunKind runKind, object[] customParams)
{
try
{
// Add filters to the project
EnvDTE.DTE dte = (EnvDTE.DTE)automationObject;

Array activeProjects = (Array)dte.ActiveSolutionProjects;
Project activeProj = (Project)activeProjects.GetValue(0);
VCProject prj = (VCProject)activeProj.ProjectItems.Item(0);
VCFilter filter = prj.AddFilter("Header_Files");
filter.AddFile("header.h");
prj.Save();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

Это терпит неудачу все же. Возвращенная ошибка:

System.IndexOutOfRangeException: индекс находился за пределами
массив.

в System.Array.InternalGetReference (Void * elemRef, ранг Int32,
Int32 * pIndices)

в System.Array.GetValue (индекс Int32)

в my_wizard.IMyWizard.RunStarted (Объект автоматизации объекта,
Dictionary`2 replacementsDictionary, WizardRunKind runKind, Object [] customParams)

Где я ошибаюсь? Как я могу добавить фильтр против шаблона?

0

Решение

Вы можете найти ответ Вот.
Некоторые говорят, что проблема возникает, когда Solution Explorer не открыт.
Вот мое решение, основанное на верхней ссылке:

    private Project getActiveProject(DTE2 dte)
{
Array projects = dte.ActiveSolutionProjects as Array;
if (projects == null || projects.Length == 0)
{
projects = dte.Solution.SolutionBuild.StartupProjects as Array;
if (projects == null || projects.Length == 0)
{
Projects pro = dte.Solution.Projects;
if (pro == null || pro.Count == 0)
return null;
return pro.Item(0);
}
}
return projects.GetValue(0) as Project;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]