5

我创建了一个新的 VS 2010 扩展包。到目前为止,我想做的就是让用户按下一个按钮并用解决方案的全部内容填充列表视图。我有以下代码:

EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.10.0");

foreach (Project project in dte.Solution.Projects)
{
    foreach(ProjectItem pi in project.ProjectItems)
    {
         listView1.Items.Add(pi.Name.ToString());
    }
}

这似乎确实有效,但是,它使用包含包的解决方案的内容填充列表,不是在运行时启动的实验实例。我是否错误地实例化了引用?

4

2 回答 2

1

GetActiveObject 方法返回 DTE 的第一个流程实例,而不是调用者 DTE。(在 Visual Studio 2010 上的 Visual Studio SDK 2010 项目中,键入 F5 执行实验性配置单元可能会失败)

看看这里这里了解更多细节......

于 2011-10-02T22:57:39.567 回答
0

不 - 你需要使用ProjectItem.SubProject来达到你想要的......取决于解决方案结构,可能需要一些递归......对于一些可以很好地完成所有这些的示例代码,请参阅http://www.wwwlicious.com/2011/03 /envdte-getting-all-projects.html

于 2011-09-28T18:02:11.660 回答