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

时间:2015-11-02 09:19:16

标签: 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._Application&#39 ;.此操作失败   因为QueryInterface调用COM组件的接口   与IID' {00063001-0000-0000-C000-000000000046}'由于失败而失败   以下错误:不支持此类接口(来自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。

发布模式如何影响这个?奇怪的调试模式工作正常..

我会感激任何想法如何解决它。谢谢!

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我通过在项目设置中启用“首选32位”来解决此问题 - >构建 - >一般

也许还可以通过动态解析收件人对象:

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

答案 2 :(得分:-2)

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

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

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