如何在C#代码中打开旧版Visual Studio中的.sln文件?

时间:2016-05-31 09:41:08

标签: c# visual-studio visual-studio-2008

我实现了一个.NET应用程序,用户浏览解决方案文件。用户可以选择在Visual Studio中打开这些解决方案文件。

问题是需要在Visual Studio 2008中打开解决方案。不在Visual Studio 2010或更高版本中。这是使解决方案文件保持原始状态所必需的。

这一切都应该在C#中发生。 Bellow是代码,但它使用用户的默认Visual Studio打开sln文件。

if (file.EndsWith(".sln") && File.Exists(file))
    System.Diagnostics.Process.Start(file);

3 个答案:

答案 0 :(得分:1)

好吧,您只是启动一个新进程指示文件到文件,并让Windows为您处理所有事情。 Windows知道应该使用默认的关联程序打开.SLN文件。

要更改此行为,您必须以编程方式分析SLN文件的版本,并基于SLN版本打开具体版本的VisualStudio作为参数传递SLN文件。

因此,您需要使用C#代码模拟:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE>devenv.exe "C:\PATH\SOLUTION.sln"

它可能看起来像这样:

private static void Main(string[] args)
    {
        var slnPath = @"C:\PATH\SOLUTION.sln";
        var slnVersion = GetVersion(slnPath);

        switch (slnVersion)
        {
            case ...:
                break;
            case 14:
                var startInfo = new ProcessStartInfo();
                startInfo.FileName = @"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe";
                startInfo.Arguments = slnPath;
                Process.Start(startInfo);
                break;
        }
    }

答案 1 :(得分:0)

在clent上启动的程序取决于注册表项HKEY_CLASSES_ROOT \ VisualStudio.Launcher.sln(由HKEY_CLASSES_ROOT.sln引用)

当您打开文件时,它会运行" c:\ Program Files(x86)\ Common Files \ Microsoft Shared \ MSEnv \ VSLauncher.exe" "%1",从.sln文件中读取版本并打开正确的版本。 关于.sln文件结构,您可以在https://msdn.microsoft.com/en-us/library/bb165951.aspx

阅读

答案 2 :(得分:0)

我发现没有必要检测制作解决方案的原始版本。默认情况下,所有解决方案都在Visual Studio 2008中创建。

在下面的代码中找到解决方案:

在代码中添加引用EnvDTE.dll和using EnvDTE;

public static void OpenSlnFile(string file)
{
    System.Type type = Type.GetTypeFromProgID("VisualStudio.DTE.9.0");
    EnvDTE.DTE dte = (EnvDTE.DTE)System.Activator.CreateInstance(type);
    dte.MainWindow.Visible = true;

    dte.Solution.Open(file);
}
相关问题