外部 C# 程序无法调用 vsto COMAddin 对象方法,但它可以在调试器内部调用

本文关键字:调用 内部 调试器 对象 程序 vsto 外部 COMAddin 方法 | 更新日期: 2023-09-27 18:33:14

我有这些简单的代码

static void Main(string[] args)
        {
            object addInName = "MyAddin";
            Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Core.COMAddIn addin = app.COMAddIns.Item(ref addInName); 
            app.Visible = false;
            var myObject = addin.Object;
            var vvv = myObject.someMethod();
        }

当运行它时,它会在线失败,某些方法抛出 NullReferenceException。但是myObject不是空的。

如果我在该行上放置了一个断点,请将鼠标光标移动到 myObject,单击扩展动态视图并单击某个界面视图。然后它就起作用了!

COM 对象虽然不为空,但似乎尚未准备就绪/初始化。但是,如果我从调试器断点检查它是内部状态,我会以某种方式强制它初始化。

问题出在哪里?

Addin COM 扩展了 StandardOleMarshalObject alrady。

外部 C# 程序无法调用 vsto COMAddin 对象方法,但它可以在调试器内部调用

尝试使用后期绑定技术(.Net 中的反射(。有关详细信息,请参阅 Type.InvokeMember。

这两个应用程序是否在同一安全上下文中运行?或者您是否使用管理员权限运行其中任何一个(以管理员身份运行(?