如何以编程方式在当前打开的Visual Studio IDE中打开.sln文件?

时间:2017-01-27 05:00:56

标签: c# visual-studio-2015

我开发了一个加载项,显示特定目录中的所有文件/文件夹。我想做的是,如果我在目录中看到一个.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中打开解决方案,而不是当前的。

提前多多感谢。

1 个答案:

答案 0 :(得分:2)

根据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;
        }
    }
}