5

在成功创建表单的 Visual Studio 加载项中,但没有给我返回 EnvDTE 的 prjItem 实例的引用。

这是将表单添加到项目中的一段代码:

string templatePath = solution.GetProjectItemTemplate("Form.zip", "csproj");
ProjectItem prjItem = project.ProjectItems.AddFromTemplate(templatePath, "myForm.cs");

观察:“解决方案”是一个 EnvDTE80.Solution2 对象。

当然,我可以通过其他方式获得参考,例如 proj.ProjectItems.Item([index]) (循环并检查名称),但这不是我想要的方式,我需要这个参考向此表单添加控件。

难道我做错了什么?

4

1 回答 1

8

刚刚在 MSDN 上找到一条评论:

AddFromTemplate 始终返回 NULL 值

曾经,这是真的。但是对于更高版本的 Visual Studio,其中包括从单个模板添加多个项目的能力,此方法的返回值无法返回多个项目。所以它现在在所有实例中都返回一个 NULL 值。这是由于在不破坏大量已在使用的代码的情况下无法更改此特定方法的 COM 签名的约束。

因此,如果您需要刚刚通过 AddFromTemplate 调用添加的项目的 ProjectItem 接口,您可以遍历 ProjectItems 集合,或者您可以在调用 AddFromTemplate 之前创建一个 ProjectItemsEvents.ItemAdded 事件,并存储传递给 OnItemAdded 的 ProjectItem处理程序。

http://msdn.microsoft.com/en-us/library/envdte.projectitems.addfromtemplate(v=vs.80).aspx#1

于 2011-03-03T17:52:48.217 回答