发布模式下的 Outlook Interop 异常 (E_NOINTERFACE)

Outlook Interop Exception (E_NOINTERFACE) in Release mode

我正在尝试制作一个可以打开新的 Outlook 2013 邮件的程序。 我引用了 Microsoft.Office.Interop.Outlook 15.0.0.0.

当 运行 在调试模式下一切正常,但在发布模式下崩溃并出现异常:

Unable to cast COM object of type 'Microsoft.Office.Interop.Outlook.ApplicationClass' to interface type 'Microsoft.Office.Interop.Outlook._Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00063001-0000-0000-C000-000000000046}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

代码:

 var _Outlook = new MSOutlook.Application();
 var _MailItem = _Outlook.CreateItem(MSOutlook.OlItemType.olMailItem) as MSOutlook.MailItem;
 var _Recip = _MailItem.Recipients.Add("xxx@yyy.com");
 Recip.Type = (int)MSOutlook.OlMailRecipientType.olTo;

 _MailItem.Recipients.ResolveAll();
 _MailItem.Subject = "xxx";

 _MailItem.Display(false);

其中 MSOutlook = Microsoft.Office.Interop.Outlook 命名空间。

我正在使用 .NET Framework 4.5 和 Outlook 2013。

发布模式对此有何影响?奇怪的是调试模式工作正常..

如果有任何解决方法,我将不胜感激。谢谢!

您何时何地尝试 运行 代码?您是否有机会查看 运行ning 进程列表?它是否包含 OUtlook.exe 条目?

尝试使用反射创建一个新的Application实例:

Activator.CreateInstance(Type.GetTypeFromProgID("Outlook.Application"));

尝试显式声明 _Outlook 变量类型:

MSOutlook.Application _Outlook = new MSOutlook.Application();

我通过在项目设置 -> 构建 -> 常规中启用 "Prefer 32-bit" 解决了这个问题。

也可能通过动态在运行时解析收件人对象:

var _Recip = ((dynamic)_MailItem.Recipients).Add("xxx@yyy.com");