1

我正在编写一个支持 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 之前的信息或答案在这里不太可能有用。

4

0 回答 0