我正在尝试在 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 进行通信的方式尚未出现我的谷歌马拉松?
另外值得注意的是,我的 Office 版本是作为“Windows 应用商店应用程序”安装的,因此不会出现在通常的“添加/删除程序”列表中,因此我找不到任何用于安装的“修复”选项。
Thanks.
进一步的调查表明我正在做正确的事情 - 尝试添加对“Microsoft Outlook 16.0 对象库”的 COM 引用现在是针对 Outlook 的正确方法...https://stackoverflow.com/a/21018418/5040941.
我检查了 GAC,程序集未注册。我已经通过“应用程序和功能”右键单击开始菜单选项进行了修复,但它们仍然没有出现 - 就好像 Windows 应用商店应用程序只是将其 dll 推入Program Files\WindowsApps\*
文件夹,并且不必费心在 GAC 中注册它们。
回应非常感谢的评论!
使用以下代码
Outlook.Application application = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application");
如果我使用 nugetMicrosoft.Office.Interop.Outlook
包裹,我得到一个System.Runtime.InteropServices.COMException: 'Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))'
例外。
如果我尝试使用Microsoft Outlook 15.0 Object Library
or Microsoft 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 对象库”,那么为什么我不能从 Visual Studio 访问它?
显然,安装时存在一些问题,没有正确注册 dll,只有 Excel 有一些技巧可以用来使引用可用。
是否有人阅读本文成功安装了 Office 365/2016 Windows Store 并在 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 Store 版本的 MS Office 2016/365。
为了解决这个问题,我必须:
- 从中卸载商店应用程序
Settings > Apps > Apps&Features > Microsoft Office Desktop Apps > Uninstall
- 登录portal.office.com
- 选择安装office应用程序,高级,选择64位版本
我无法理解为什么戴尔认为我们希望在 64 位计算机上安装 32 位版本,或者为什么 Microsoft 的人没有发布此问题的解决方案,但尽管如此,RogerN 是正确的。感谢大家抽出时间来帮助我。