【问题标题】:Visual Studio Add-Ins: Can't get Document object from SelectedItemsVisual Studio 加载项:无法从 SelectedItems 获取 Document 对象
【发布时间】:2025-12-04 05:20:03
【问题描述】:

首先让我说我是为 Visual Studio 开发插件的新手...

当使用 DTE2 对象时,我试图获取有关当前所选文档的一些信息。如果我这样做:

DTE2 VisualStudioInstance = somethingOrOther;
Document documentInfo;

if(VisualStudioInstance.SelectedItems.MultiSelect == false)
{
    documentInfo = VisualStudioInstance.SelectedItems.Item(1).ProjectItem.Document;
}

Document 对象似乎总是为空。 VisualStudioInstance.SelectedItems.Item(1).Project 也是 null (我不一定需要,但这似乎也很奇怪。它确实给了我所选项目的名称,所以我至少知道它正在找到一些东西.

现在,如果我直接访问 VisualStudioInstance.ActiveDocument,我会得到我正在寻找的所有信息。文档是否真的必须打开才能获取信息?如果是这样,我将如何在不打开选定项目的情况下获取文档信息?我要查找的主要内容是所选文件的完整路径信息。提前致谢。

【问题讨论】:

标签: .net visual-studio visual-studio-addins


【解决方案1】:

其实你可以使用ProjectItem.FileNames属性。它是一个索引属性,即使文档关闭也有效。

【讨论】:

  • 但是我怎么知道选择了哪一个呢?
  • 嗨,我不明白。 VisualStudioInstance.SelectedItems.Item(1).ProjectItem 应该为您提供当前选定的项目项。由此, FileNames[1] 应该为您提供文件的完整路径。文档指出,对于某些类型(例如 resx),您可能有多个文件,但在我的测试中这并没有发生。最好的
  • 抱歉,我以为您在谈论一个独立的 ProjectItem 对象,而不是链接到 SelectedItems 项的对象。我想我应该在发帖前检查一下。感谢您的帮助。
【解决方案2】:

如果关闭则先打开它,然后文档实例应该可用。

if (!projectItem.IsOpen)
{
    projectItem.Open();
}

【讨论】: