Отсутствует ссылка на элемент проекта, созданный с помощью AddFromTemplate()
В надстройке Visual Studio, которая успешно создает форму, но не дает ссылки на экземпляр prjItem в EnvDTE.
Вот фрагмент кода, который добавляет форму в проект:
string templatePath = solution.GetProjectItemTemplate("Form.zip", "csproj");
ProjectItem prjItem = project.ProjectItems.AddFromTemplate(templatePath, "myForm.cs");
Obs.: 'solution' - это объект EnvDTE80.Solution2.
Конечно, я могу получить ссылку другими способами, такими как proj.ProjectItems.Item([index]) (выполнение цикла и проверка имен), но я не хочу этого делать, и мне нужна эта ссылка, чтобы добавить элементы управления в эту форму.
Я делаю что-то неправильно?
1 ответ
Просто нашел комментарий на MSDN:
AddFromTemplate всегда возвращает значение NULL
Когда-то это было правдой. Но в более поздних версиях Visual Studio, которые включали возможность добавления нескольких элементов из одного шаблона, возвращаемое значение для этого метода не могло возвращать несколько элементов. Так что теперь он возвращает значение NULL во всех случаях. Это связано с тем, что сигнатура COM для этого конкретного метода не может быть изменена без нарушения большого количества уже используемого кода.
Следовательно, если вам нужен интерфейс ProjectItem элемента, только что добавленного с помощью вызова AddFromTemplate, вы можете выполнить итерацию по коллекции ProjectItems или создать событие ProjectItemsEvents.ItemAdded непосредственно перед вызовом AddFromTemplate и сохранить в памяти ProjectItem, переданный в OnItemAdded. обработчик.
http://msdn.microsoft.com/en-us/library/envdte.projectitems.addfromtemplate(v=vs.80).aspx