我正在撰写VSTA 2015 1 启用的应用。
在其中,我需要加载一个程序集,访问一个众所周知的方法(一个构造函数,而不是它重要),调用它,并传递一个COM对象(包裹起来,所以它自然是一个.net对象)
这很好用。现在,为了启用调试,我需要加载程序集的进程与与VSTA子系统交互的进程不同。应用程序与VSTA子系统交互;这意味着我需要在不同的过程中加载程序集。
是否有一种简单的方法可以在单独的进程中加载.net程序集,将com对象(或包装com对象的.net对象)传递给一个众所周知的入口点?
复杂的方法将涉及创建一个自定义的.exe加载器来加载程序集,使用IPC来获取COM接口,将其包装起来并将其传递给程序集。然后使用IPC返回任何错误消息。不确定我应该使用什么样的IPC。但是这里有很多活动部件(两个IPC系统,加载器),我希望没有它们就能有一种简单的方法。
我看了System.Diagnostic.Process.Start
,但它似乎无法打开一个程序集作为一个进程并将它传递给.net对象"选项之中。
公寓(和类似的)可能不会工作,因为需要单独的过程,以便调试器可以附加到VSTA"脚本"处理并暂停/推进它而不锁定VSTA"托管"过程(在文档中说它可能导致死锁)。
如果重要的话,应用程序是混合托管/非托管的。大多数托管组件是C#,大多数非托管组件是C ++,大多数接口是C ++ / cli。
1 VSTA 2015是Microsoft的解决方案,允许即时编辑类似脚本的" .net语言的环境,其中Visual Studio IDE工作流与应用程序工作流集成在一起。请注意,这与VSTA 2012之前的基本方式不同:VSTA 2012之前的信息或答案在此处不太可能有用。