【问题标题】:Cannot add reference to Outlook 2016 (Office 365) Interop (16.0.0.0)无法添加对 Outlook 2016 (Office 365) 互操作 (16.0.0.0) 的引用
【发布时间】:2018-04-18 08:59:04
【问题描述】:

我正在尝试在 C# .NET 4.6.1 WPF 项目中添加对“Microsoft Outlook 16.0 对象库”的引用,因为我安装了 Office 2016。以前版本的对象库与 2016 版的 office 不兼容。

如果我使用 Excel 的 VBA 编辑器,则会列出“Microsoft Outlook 16.0 对象库”,并且存在于 C:\Program Files\WindowsApps\Microsoft.Office.Desktop_16010.9126.2116.0_x86_8wekyb3d8bbwe\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSOUTL.OLB 中,如下所示:

但是,当我使用 Visual Studio 时,COM 选项卡没有列出“Microsoft Office 16.0 对象库”,当我尝试浏览到 C:\Program Files\WindowsApps 时,我得到“您当前无权访问此文件夹”,并单击“继续”(获取访问权限)会导致“您已被拒绝访问此文件夹的权限”。

所以基本上,Office 2016 dll 似乎被隐藏在一个人、狗和本地管理员都无法访问的文件夹中。


我要做的就是连接到打开的 Outlook 应用程序,然后发送一封带有附件的电子邮件,所以也许另一个问题是,是否有一些新奇的方式与 Outlook 2016 进行通信出现在我的 Googleathon 中?


另外值得注意的是,我的 Office 版本是作为“Windows 应用商店应用程序”安装的,因此不会出现在通常的“添加/删除程序”列表中,因此我找不到任何“修复”选项进行安装。

谢谢。


进一步的调查表明我在做正确的事 - 尝试添加对“Microsoft Outlook 16.0 对象库”的 COM 引用现在是针对 Outlook 的正确方法...https://stackoverflow.com/a/21018418/5040941

我检查了 GAC,但程序集未注册。我已经通过“应用程序和功能”右键单击开始菜单选项进行了修复,但它们仍然没有出现 - 就好像 Windows 应用商店应用程序只是将它们的 dll 推到 Program Files\WindowsApps\* 文件夹中,而不是麻烦在 GAC 中注册它们。


回答备受赞赏的 cmets!

使用以下代码

Outlook.Application application = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application");

如果我使用 nuget Microsoft.Office.Interop.Outlook 包,我会得到 System.Runtime.InteropServices.COMException: 'Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))' 异常。

如果我尝试通过 Add Reference 的 Assemblies/Extensions 选项卡使用 Microsoft Outlook 15.0 Object LibraryMicrosoft Outlook 14.0 Object Library 引用,则会收到 System.Runtime.InteropServices.COMException: 'Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))' 异常。

我不认为访问 WindowsApps 文件夹是可行的方法。 首先,由于某种原因它被锁定,这通常表明如果我开始挖掘和更改安全权限可能会出现麻烦,更不用说在我的解决方案中维护最新 dll 的副本无疑会给我的项目增加不必要的复杂性。

其次,但更重要的是,如果我安装了 office,并且可以从 Excel Vba 访问“Microsoft Outlook 16.0 Object Library”,那么为什么我不能从 Visual Studio 访问它?

安装程序没有正确注册 dll 显然存在一些问题,只有 Excel 有一些技巧可以用来提供参考。


阅读此文的人是否成功安装了 Office 365/2016 Windows 应用商店并在 Visual Studio 中找到了对“Microsoft Outlook 16.0 对象库”的引用?

只有我有这个问题吗?!因为它会影响我办公室中运行 Windows 10 和 Office 365 的多台计算机...


回答 RogerN(谢谢),请看下图 - 我没有列出 Microsoft.Office.Interop.Outlook 版本 16,也没有列出 Microsoft.Office.Core。

如果我尝试使用 v15 库,则会收到以下错误:

System.Runtime.InteropServices.COMException HResult=0x80040154 Message=Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). Source=mscorlib


*答案是 *

我从戴尔购买的两台电脑都是 64 位的,但它们预装了 32 位的 Windows 商店版本的 MS Office 2016/365。

为了解决这个问题,我不得不:

  • Settings > Apps > Apps&Features > Microsoft Office Desktop Apps > Uninstall卸载商店应用程序
  • 登录portal.office.com
  • 选择安装办公应用,高级,选择 64 位版本

为什么戴尔认为我们希望在 64 位机器上安装 32 位版本,或者为什么微软的人没有发布解决此问题的方法,我无法理解,但无论如何,RogerN 是正确的。感谢大家抽出时间来帮助我。

【问题讨论】:

  • 你试过使用NugetMicrosoft.Office.Interop.Outlook
  • 谢谢 - 我刚刚尝试添加它,但描述说“这是执行 Office 2013 Outlook 互操作所必需的程序集”。我正在使用 Office 2016。使用此软件包时仍然遇到相同的错误。版本是 15.x,但我正在寻找 16.x。
  • 您可以在 Office 2016 中使用较旧的互操作...不能另辟蹊径
  • 正如@Ctznkane525 所说,旧版本没有帮助吗?另外,如果没有,您可以从 Windows 命令/终端复制此文件,甚至无法访问?
  • 您是否可以在 64 位计算机上安装 32 位版本的 Office?这将导致仅注册 32 位 COM 对象,而 64 位 .NET 应用程序将无法找到它们。

标签: c# excel visual-studio outlook office-interop


【解决方案1】:

详细说明我之前的评论:根据您的描述,听起来您已经在 64 位计算机上安装了 32 位版本的 Microsoft Office。只有 32 位 COM 对象会被注册,因此 64 位 .NET 应用程序将无法找到它们。如果您搜索注册表,您应该会发现 0006F03A-0000-0000-C000-000000000046 类 ID 仅注册在 Wow6432Node 下。

要解决此问题,您可以安装 64 位版本的 Office 或强制您的 .NET 应用程序以 x86 平台为目标。

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 2021-12-12
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多