【问题标题】: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;
}
}
}