C# 发布模式下的Outlook互操作异常(E_NOINTERFACE)
我正在尝试制作一个可以打开新Outlook 2013邮件的程序。 我引用了Microsoft.Office.Interop.Outlook 15.0.0.0 在调试模式下运行时,一切正常,但在发布模式下崩溃,例外情况如下: 无法强制转换类型为的COM对象 将“Microsoft.Office.Interop.Outlook.ApplicationClass”更改为接口类型 “Microsoft.Office.Interop.Outlook.\u应用程序”。此操作失败 因为接口的COM组件上的QueryInterface调用 由于以下原因,IID“{00063001-0000-0000-C000-0000000000 46}”失败 以下错误:不支持此类接口(HRESULT的异常: 0x80004002(E_NOINTERFACE)) 代码: 其中MSOutlook=Microsoft.Office.Interop.Outlook命名空间 我正在使用.NET Framework 4.5和Outlook 2013 释放模式如何影响这一点?奇怪的是,调试模式工作正常C# 发布模式下的Outlook互操作异常(E_NOINTERFACE),c#,com,outlook,office-interop,com-interop,C#,Com,Outlook,Office Interop,Com Interop,我正在尝试制作一个可以打开新Outlook 2013邮件的程序。 我引用了Microsoft.Office.Interop.Outlook 15.0.0.0 在调试模式下运行时,一切正常,但在发布模式下崩溃,例外情况如下: 无法强制转换类型为的COM对象 将“Microsoft.Office.Interop.Outlook.ApplicationClass”更改为接口类型 “Microsoft.Office.Interop.Outlook.\u应用程序”。此操作失败 因为接口的COM组件上的Qu
如果有任何解决办法,我将不胜感激。谢谢 您在何时何地尝试运行代码?您是否有机会查看正在运行的进程列表?它是否包含OUtlook.exe条目 尝试使用反射创建新的应用程序实例:
Activator.CreateInstance(Type.GetTypeFromProgID("Outlook.Application"));
尝试显式声明_Outlook变量类型:
MSOutlook.Application _Outlook = new MSOutlook.Application();
我通过在项目设置->构建->常规中启用“首选32位”解决了这个问题 也可以在运行时通过动态解析recipients对象:
var _Recip = ((dynamic)_MailItem.Recipients).Add("xxx@yyy.com");
和以前一样的例外。。似乎它与64位有关,因为“更喜欢32位”解决了这个问题-
var _Recip = ((dynamic)_MailItem.Recipients).Add("xxx@yyy.com");