以编程方式启动Visual Studio; C#相当于VB的CreateObject("VisualStudio.DTE.8.0")

Ric*_*dle 4 c# com createobject visual-studio

我可以从VBScript启动一个新的隐藏Visual Studio进程,并通过以下方式以编程方式驱动它:

Set DTE = CreateObject("VisualStudio.DTE.8.0")
DTE.DoStuff()
Run Code Online (Sandbox Code Playgroud)

我如何在C#中做到这一点?(编辑:使用正确的类型,而不是该VBScript代码使用的通用COM对象.)

我试过这个:

using EnvDTE;
...
DTE dte = new DTE();
Run Code Online (Sandbox Code Playgroud)

但我得到"检索CLSID {3C9CFE1E-389F-4118-9FAD-365385190329}组件的COM类工厂失败".

Ric*_*dle 7

我找到了答案(感谢Sebastiaan Megens让我走上正轨):

[STAThread]
static void Main(string[] args)
{
    System.Type t = System.Type.GetTypeFromProgID("VisualStudio.DTE.8.0", true);
    DTE2 dte = (EnvDTE80.DTE2)System.Activator.CreateInstance(t, true);

    // See http://msdn.microsoft.com/en-us/library/ms228772.aspx for the
    // code for MessageFilter - just paste it in.
    MessageFilter.Register();

    dte.DoStuff();
    dte.Quit();
}

public class MessageFilter : IOleMessageFilter
{
   ... Continues at http://msdn.microsoft.com/en-us/library/ms228772.aspx
Run Code Online (Sandbox Code Playgroud)

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