Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未返回对通过AddFromTemplate()创建的项目项的引用_C#_Visual Studio_Add In_Envdte_Projectitem - Fatal编程技术网

C# 未返回对通过AddFromTemplate()创建的项目项的引用

C# 未返回对通过AddFromTemplate()创建的项目项的引用,c#,visual-studio,add-in,envdte,projectitem,C#,Visual Studio,Add In,Envdte,Projectitem,在VisualStudio外接程序中,该外接程序成功创建了一个表单,但没有返回对EnvDTE的prjItem实例的引用 下面是将表单添加到项目中的一段代码: string templatePath = solution.GetProjectItemTemplate("Form.zip", "csproj"); ProjectItem prjItem = project.ProjectItems.AddFromTemplate(templatePath, "myForm.cs"); Obs.:“

在VisualStudio外接程序中,该外接程序成功创建了一个表单,但没有返回对EnvDTE的prjItem实例的引用

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

string templatePath = solution.GetProjectItemTemplate("Form.zip", "csproj");
ProjectItem prjItem = project.ProjectItems.AddFromTemplate(templatePath, "myForm.cs");
Obs.:“解决方案”是一个EnvDTE80.Solution2对象

当然,我可以通过其他方式获得引用,比如proj.ProjectItems.Item([index])(执行循环并检查名称),但这不是我想要的方式,我需要这个引用,或者在表单中添加控件


我做错什么了吗?

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

AddFromTemplate始终返回空值 价值观

曾经,这是真的。但是 在Visual Studio的更高版本中, 其中包括添加 来自单个模板的多个项目, 此方法的返回值可能不正确 不返回多个项目。所以现在 在所有实例中返回空值。 这是由于 此特定的COM签名 方法在没有 破坏大量已在使用的代码

因此,如果您需要 项目的ProjectItem接口刚刚 通过AddFromTemplate调用添加, 您可以在 ProjectItems集合,或者您可以 创建ProjectItemsEvents.ItemAdded 通话前的事件 AddFromTemplate,并将 已将项目传递给您的联系人 处理程序


这将在现有解决方案中创建一个新项目。我想在现有项目中创建一个新的项目项(在我的例子中是Windows窗体)。这肯定会有很大帮助!好吧,最后我会做我一直避免做的事,但至少我已经知道它是有效的。。谢谢!刚刚写了一个相关的问题: