【问题标题】:How do I open an .sln file in older Visual Studio in C# code?如何使用 C# 代码在旧版 Visual Studio 中打开 .sln 文件?
【发布时间】:2016-09-29 06:11:56
【问题描述】:

我实现了一个 .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);

【问题讨论】:

  • .sln 文件是一个非常简单的文本文件。用文本编辑器看看,记事本就可以了。查看版本号?你可以改变它。

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


【解决方案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;
        }
    }

【讨论】:

    【解决方案2】:

    我发现没有必要检测制定解决方案的原始版本。默认情况下,所有解决方案都是在 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);
    }
    

    【讨论】:

    • 虽然这可能适用于您的问题今天最好添加版本检查,以便程序在将来执行正确的工作,或给出错误消息当关于版本的假设不正确时。
    【解决方案3】:

    在 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阅读

    【讨论】:

      猜你喜欢
      • 2011-07-17
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多