【问题标题】:How to open a .sln file in the current open Visual Studio IDE programmatically?如何以编程方式在当前打开的 Visual Studio IDE 中打开 .sln 文件?
【发布时间】:2019-01-19 18:46:26
【问题描述】:

我开发了一个插件,可以显示特定目录中的所有文件/文件夹。我想做的是,如果我在目录中看到一个 .sln 文件,双击想在当前打开的 Visual Studio 解决方案资源管理器中打开解决方案。 我正在使用 Visual Studio 2015。

System.Type type = Type.GetTypeFromProgID("VisualStudio.DTE.14.0");
EnvDTE.DTE dte = (EnvDTE.DTE)System.Activator.CreateInstance(type); 
dte.MainWindow.Visible = true;
dte.Solution.Open(path); 

此特定代码在新的 Visual Studio 中打开解决方案,而不是当前的。

非常感谢。

【问题讨论】:

标签: c# visual-studio-2015


【解决方案1】:

根据this post,最好以这种方式获得当前解决方案:

获取 DTE 的正确方法非常简单。实际上,您的加载项 已经引用了它运行的 DTE(即, 打开解决方案)。它存储在全局变量中 _applicationObject 在您的加载项连接类中。它是在您的外接程序在 OnConnection 事件处理程序中启动时设置的。

所以,我们可以运行它来在当前 Visual Studio 实例中打开一个解决方案:

_applicationObject.Solution.Open(@"D:\folder1\tets.sln");

代码通常会在您的加载项Exec 方法中调用,如下所示:

public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
{
    handled = false;
    if (executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
    {
        if (commandName == "MyAddin1.Connect.MyAddin1")
        {
            _applicationObject.Solution.Open(@"D:\...\tets.sln"); // *** open solution inside current VS instance

            handled = true;
            return;
        }
    }
}

【讨论】:

  • 删除我的答案显然更好。还将此问题标记为重复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
相关资源
最近更新 更多