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