以编程方式启动 Visual Studio; C# 相当于 VB 的 CreateObject(“VisualStudio.DTE.8.0”)
我可以从 VBScript 启动一个新的隐藏 Visual Studio 进程,并以编程方式驱动它,方法如下:
Set DTE = CreateObject("VisualStudio.DTE.8.0")
DTE.DoStuff()
How do I do that in C#? (编辑:使用正确的类型,而不是 VBScript 代码使用的通用 COM 对象。)
我已经尝试过:
using EnvDTE;
...
DTE dte = new DTE();
但我得到“正在检索具有 CLSID {3C9CFE1E-389F 的组件的 COM 类工厂” -4118-9FAD-365385190329}失败”。
I can start a new hidden Visual Studio process from VBScript, and drive it programmatically, by doing this:
Set DTE = CreateObject("VisualStudio.DTE.8.0")
DTE.DoStuff()
How do I do that in C#? (Edit: using the correct types, not generic COM objects as used by that VBScript code.)
I've tried this:
using EnvDTE;
...
DTE dte = new DTE();
but I get "Retrieving the COM class factory for component with CLSID {3C9CFE1E-389F-4118-9FAD-365385190329} failed".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我找到了答案(感谢 Sebastiaan Megens 让我走上正轨):(
STAThread 和 MessageFilter 的废话是“由于外部多线程应用程序和 Visual Studio 之间的线程争用问题”,无论这意味着什么。代码来自 http://msdn.microsoft.com/en-us/library/ms228772 .aspx 使其工作。)
I found the answer (thanks to Sebastiaan Megens for putting me on the right track):
(The nonsense with STAThread and MessageFilter is "due to threading contention issues between external multi-threaded applications and Visual Studio", whatever that means. Pasting in the code from http://msdn.microsoft.com/en-us/library/ms228772.aspx makes it work.)
我不知道如何启动 Visual Studio 的新实例,但我通过调用使用现有实例:
也许创建新实例是类似的东西?希望这个对你有帮助。
问候,
塞巴斯蒂安
I don't know how start a new instance of Visual Studio, but I use an existing instance by calling:
Maybe creating a new instance is something similar? Hope this helps a bit.
Regards,
Sebastiaan
Microsoft VB 的 CreateObject 源代码。
Microsoft souce code for VB's CreateObject.
简单回答:用VB编写,编译,用Reflector打开,用c#方式反编译!
Simple answer: write it in VB, compile it, open it with Reflector, and decompile it in c# mode!