【问题标题】:How to programmatically open project/solution in already running Visual Studio?如何在已经运行的 Visual Studio 中以编程方式打开项目/解决方案?
【发布时间】:2017-04-13 07:19:32
【问题描述】:

“可能的重复”旨在打开文件,就像在记事本中一样,我正在寻找打开 .csproj/.sln 文件而不是作为原始文本文件,而是作为完整的项目/解决方案,例如,如果我的路径是 .sln 文件,应该打开整个解决方案,而不仅仅是单个 .sln 文件。

我以这种方式打开项目/解决方案:

var psi = new System.Diagnostics.ProcessStartInfo(path);
System.Diagnostics.Process.Start(psi);

path 是项目/解决方案的路径。它工作正常,但它会启动 另一个 Visual Studio 来打开给定的文件。

我想在已经运行的 VS 中打开项目/解决方案(如果没有,在这种情况下,请务必启动 VS)。

怎么做?

【问题讨论】:

  • @TamásSzabó,谢谢,但我想打开 solution (就像您通常在 VS 中手动打开一样),而不是将解决方案单个文件作为文本文件打开。链接的问题仅将 VS 用作文本编辑器,非常有用,但这不是我的目标。
  • 是的。我开始考虑用/command 替换/edit 并将OpenSolution 作为命令传递,但它也打开了一个新的VS。我现在得走了,但也许你能在那里找到一些东西。祝你好运!

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


【解决方案1】:

我添加这个以防有人仍在寻找这个问题的答案,就像我在 2019 年一样。

如何以编程方式打开项目/解决方案 在已经运行的 Visual Studio 中?

为了完整起见,我还添加了如何打开文件夹文件

确保将包含这些语句的代码括在try/catch 中,以处理找不到路径等。

假设:

  using EnvDTE;
  using EnvDTE80;
  using Microsoft.VisualStudio.Shell;

  var dte = Package.GetGlobalService(typeof(_DTE)) as DTE2;
  1. 以编程方式打开解决方案
   dte.Solution.Open(path);
  1. 以编程方式打开项目
  dte.ExecuteCommand("File.OpenProject", path);
  1. 以编程方式打开文件夹
  dte.ExecuteCommand("File.OpenFolder", path);
  1. 以编程方式打开文件
  dte.ExecuteCommand("File.OpenFile", path);

我希望对某人有所帮助。

【讨论】:

  • GetGlobalService 返回空值。我猜某处存在参考或版本冲突。我引用的是 Microsoft.VisualStudio.Shell.15.0.dll
  • 应该是AsyncPackage.GetGlobalService。还要确保您没有尝试在包的构造函数中获取 DTE 的值。
  • 这就是我所拥有的。仍然返回 null static void Main(string[] args) { var dte = AsyncPackage.GetGlobalService(typeof(_DTE)) as DTE2; var solutionFile = @"C:\Projects\my.sln"; dte.Solution.Open(solutionFile); }
  • @Yann Duran 是否可以通过上述方法打开文件后转到函数定义的开头?
  • @sidso 你的意思是打开另一个文件吗?
猜你喜欢
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
相关资源
最近更新 更多