c# - 从单独的进程中自动化 Visual Studio 实例

标签 c# visual-studio automation

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

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

最佳答案

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

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 的代码使其工作。)

关于c# - 从单独的进程中自动化 Visual Studio 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267827/

相关文章:

c# - 为 500,000 个航类寻找航类连通性的算法

visual-studio-2010 - Visual Studio 2010 的深色主题与生产力强大工具

python-3.x - 如何使用python从具有相同属性的多个视频文件中删除两个音频流中的一个特定流?

ubuntu - 使用命令行在 Virtualbox 上启动 Ubuntu 虚拟客户机

selenium - 如何通过 Selenium 实现大型机自动化

C# Vimeo 上传 - 不工作

c# - 在 C# 中将 HTML 电子邮件签名附加到纯文本电子邮件正文

c# - C# 中的 System.String 类型

wpf - 为什么 MVVM Light 将系统程序集复制到应用程序文件夹?

javascript - 为什么我的 Intellisense 消失在 Visual Studio 中的 Javascript 文件中?