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