首页 > 解决方案 > 无法使用 Microsoft.Office.Interop.Outlook 使用已与其基础 RCW 分离的 COM 对象

问题描述

我面临以下问题

 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)我应该用;释放邮件对象吗 ??

标签: c#asp.net.netcomrcw

解决方案


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

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

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


推荐阅读