从单独的进程自动化Visual Studio实例

时间:2009-08-12 18:19:19

标签: c# visual-studio automation

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

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

2 个答案:

答案 0 :(得分:4)

这是一个连接到正在运行的Visual Studio并发出Build命令的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的代码使其工作。)

答案 1 :(得分:0)

如果您只是尝试自动化应用程序的构建/打包,那么您应该查看MSBuild - 这是Microsoft的构建引擎,它允许您自动编写Visual Studio的大多数功能的自动化。