Отсутствует ссылка на элемент проекта, созданный с помощью AddFromTemplate () - PullRequest
5 голосов
/ 03 марта 2011

В надстройке 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 Ответ

8 голосов
/ 03 марта 2011

Только что нашел комментарий на 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#1

...