获取 Visual Studio 中活动文档的路径

Get the path of the active document in Visual Studio

我正在使用 C# 为 Visual Studio 2013 编写一个 VSPackage。

我需要将一个简单的菜单添加到 Visual Studio 菜单栏。单击它时,我希望将 Visual Studio 中的当前打开(活动)文档上传到特定存储库。

更多说明: 我想创建类似 VisualSVN 的东西,当你安装它时,一个菜单会添加到 VS 工具栏。单击工具栏上的菜单时,我想在 Visual Studio.

中上传我当前打开的文件

问题:如何获取Visual Studio中的当前文档路径?

我试过: Globals.ThisAddin.Application.ActiveDocumentDTE.ActiveDocument

(基本上GlobalsDTE对我来说没有ThisAddinActiveDocuments。)

所以我通过这个解决了我的问题:

DTE dte = (DTE)GetService(typeof(DTE));
string filePath = dte.ActiveDocument.FullName;

我也试过了DTE2:

EnvDTE80.DTE2 dte2;
dte2 = (ENVDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.12.0");
string filePath = dte2.ActivaDocument.FullName;

注意:当使用 DTE 时,我在 Main Visual Studio 中获取当前文档(当 运行 代码时,另一个 Visual Studio会打开,调试的时候可以看到你的VSPackage。) 第一种方法(DTE)获取新打开的VS中活动文档的路径。第二种方法 (DTE2) 获取当前 Visual Studio 中的活动文档——您正在编写代码的文档。