已与其底层 RCW 分离的 COM 对象无法使用 Microsoft.Office.Interop.Outlook 使用

问题描述

我面临以下问题

 COM object that has been separated from its underlying RCW cannot be used.'
    System.Runtime.InteropServices.InvalidComObjectException: COM object that has been separated from its underlying RCW cannot be used.
       at System.StubHelpers.StubHelpers.GetCOMIPFromrCW(Object objSrc,IntPtr pCPCMD,IntPtr& ppTarget,Boolean& pfNeedsRelease)
       at Microsoft.Office.Interop.Outlook._MailItem.get_Subject()

以下代码

  var mail = inspectorWrapper.MailItem;
                showcaseModel.Subject = mail?.Subject;
                showcaseModel.Title = mail?.Subject;

我怎样才能避免这种异常? 我应该用 Marshal.ReleaseComObject(mail) 释放邮件对象吗? ?

解决方法

这是一个很好的指标,表明您需要检查加载项的代码并检查所有 Marshal.ReleaseComObject 语句。

如果您的加载项代码中没有此类语句,则表明您正尝试在代码中使用来自 OOM 的不可用对象。例如,打开一个新的检查器窗口,您可以在其中检索对邮件项的对象引用并将其保存在代码中。但是用户可以发送此类项目,因此您的对象引用与底层 COM 对象分离。它只是不再有效 - 该项目已移动到另一个文件夹(或删除,如果在项目上设置了 DeleteAfterSubmit 属性)。

建议相同 - 检查您的源代码。