在Visual Studio(2010)中以编程方式打开文件

7

我正在构建一个VS包,并尝试从该包发送命令到Visual Studio,以在新标签页中打开用户选择的文件(就像用户通过转到文件->打开...来执行操作一样)。

我记得曾经看到过如何做到这一点。有人能帮我恢复一下记忆吗?

3个回答

8

嗨,克里斯...我不明白。我的DTE对象没有这些方法。如果我尝试创建一个新的DTE对象,它会给我一个错误。有什么建议吗? - Alex
你引用了哪些程序集(比如说你的DTE类型来自哪里)?上面提到的DTE对象来自于EnvDTE.dll,所以尝试添加对它的引用。当你尝试创建一个新的DTE对象时,你遇到了什么错误?是编译时错误还是运行时错误? - Chris Schmich
1
我正在引用所有的ENVDTE80/100程序集。错误是编译时:无法创建抽象类或接口“EnvDTE80.DTE2”的实例。此外,我正在运行这个VS包(因为我正在构建一个VS包)。 - Alex
有没有办法在现有选项卡中打开它? - JoanComasFdz

8

我喜欢使用DTE方法ExecuteCommand("commandName"),因为你可以在VS命令窗口中测试该命令。

在这种情况下,执行ExecuteCommand("File.OpenFile")命令。

如果需要,您可以在第二个可选的字符串参数中添加命令参数。


我无论如何都找不到这个方法。它在.NET 4中还存在吗? - Alex
我刚在VS2010中创建了一个插件 - 模板会创建一个私有变量:private DTE2 _applicationObject;你可以从那里获取ExecuteCommand... - philiphobgen
啊,是的,我明白你的意思。问题在于现在我正在构建一个Visual Studio包。我也可以创建一个Visual Studio插件,但是,我该如何创建一个插件实例,以便我可以在VS包中使用它,但插件仍将保留其_applicationObject。我希望你能理解我的意思,这有点像从WinForms应用程序中使用插件对象(_applicationObject)。 - Alex
也适用于Visual Studio 2017和EnvDTE80.DTE2dte2.ExecuteCommand("File.OpenFile", pathToYourFile); - Pollitzer

0
你可以使用这个函数:VsShellUtilities.OpenDocument
如果你在 VSPackage 方法中调用它,代码如下:
VsShellUtilities.OpenDocument(this, fileName);

命名空间:Microsoft.VisualStudio.Shell

程序集:Microsoft.VisualStudio.Shell.15.0.dllMicrosoft.VisualStudio.Shell.14.0.dll

此外,它还有两个重载函数,可返回打开文档的附加信息。

注意:此功能仅适用于VS 2015及更高版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接