【问题标题】:Automating Visual Studio instance from separate process从单独的进程自动化 Visual Studio 实例
【发布时间】:2009-08-12 18:19:19
【问题描述】:

有没有办法编写一个可以连接到正在运行的 Visual Studio 实例并向其发出命令的应用程序?例如,我是否可以编写一个带有按钮的 WPF 应用程序,当单击该按钮时,会向已打开的 Visual Studio 实例发出“Build.BuildSolution”命令,使其开始构建?

我确定我可以使用 SendKeys 发送 Ctrl+Shift+B,但我想知道是否有办法写入实际 API 以自动化 Visual Studio,并按名称调用命令。

【问题讨论】:

  • 为什么不直接制作一个 Visual Studio 插件呢?如果甚至在命名管道上侦听这些命令。
  • 如果这是唯一的方法,我可能可以制作一个 VS 插件,但如果已经有办法,我会觉得很痛苦,然后多次重启 VS从外部自动化 VS。

标签: c# visual-studio automation


【解决方案1】:

这是一个连接到正在运行的 Visual Studio 并发出构建命令的 C# 程序。 DTE.9 部分表示“Visual Studio 2008” - 对于 VS 2005 使用 DTE.8,对于 VS 2010 使用 DTE.10

using System;
using System.Runtime.InteropServices;
using EnvDTE80;

namespace SORemoteBuild
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            // Get an instance of the currently running Visual Studio IDE.
            EnvDTE80.DTE2 dte2;
            dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
                                      GetActiveObject("VisualStudio.DTE.9.0");
            dte2.Solution.SolutionBuild.Build(true);
        }
    }

    public class MessageFilter : IOleMessageFilter
    {
        // ... Continues at http://msdn.microsoft.com/en-us/library/ms228772.aspx

(STAThread 和 MessageFilter 的废话是“由于外部多线程应用程序和 Visual Studio 之间的线程争用问题”,不管这意味着什么。粘贴来自 http://msdn.microsoft.com/en-us/library/ms228772.aspx 的代码使其工作。)

【讨论】:

    【解决方案2】:

    如果您只是想自动构建/打包您的应用程序,您应该查看MSBuild——它是 Microsoft 的构建引擎,可让您对 Visual Studio 的大多数功能进行脚本自动化。

    【讨论】:

    • 是的,但是 (a) 我希望 Visual Studio 知道它已被重建,以便随后的 Run 立即开始,并且 (b) Build 只是一个示例——它不是我想要的唯一命令签发。我最终也想从 VS 中查询一些东西,比如编辑器保存状态等等。但是像“按名称发出命令”这样的简单问题似乎是最好的起点。
    猜你喜欢
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多