VSPackage:如何在没有打开"真实"解决方案时获取所选文件

Dan*_*lba 2 c# vspackage visual-studio vs-extensibility

我正在用C#开发一个VSPackage,我想知道当只有一个文件(或在Visual Studio中打开几个文件)时如何获取当前文件.

当存在层次结构(打开真正的解决方案)时,一切正常.但是当我在Visual Studio中打开一个文件时,我无法获得当前的选择.我的意思是打开Visual Studio(没有解决方案)和select File- > Open- > File.

我需要获取其中一个:itemid,documentCookie,mkDocumentName或其他.

我尝试了以下方法:

  • IVsMonitorSelection.GetCurrentSelection() - >它总是检索没有层次结构的解决方案项ID(Intpr.Zero)
  • IVsSelectionEvents - >我试着听选择事件,新的itemId总是解决方案itemid
  • RunningDocumentTable - >好吧,我很接近找到解决方案,因为我可以枚举打开的文件,但我不知道如何确定当前的文件.

sis*_*sve 5

这听起来像是DTE可以为您解决的问题.你检查过DTE2.ActiveDocument(通过查询SDTE检索)吗?

var dte = (DTE2)GetService(typeof(SDTE));
var doc = dte.ActiveDocument;
// Check doc.Name, doc.Path, doc.FullName
Run Code Online (Sandbox Code Playgroud)