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类工厂失败".
我找到了答案(感谢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使它工作.)