发布模式下的 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");
我正在尝试制作一个可以打开新的 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");