【问题标题】:interop exception when trying to read the contents of an office outlook template尝试读取 Office Outlook 模板内容时出现互操作异常
【发布时间】:2020-10-28 22:53:14
【问题描述】:

我正在尝试阅读电子邮件正文中嵌入图像的办公模板(.oft 文件)。我尝试使用读取内容的the MsgReader nuget package,但无法管理正文中的图像。

我也尝试过使用 Microsoft.Office.Interop.Outlook,但这会在运行时引发以下错误:

错误:System.IO.FileNotFoundException:无法加载文件或程序集“office,版本=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c”。该系统找不到指定的文件。 文件名:'office,Version=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c'

我正在努力寻找解决方案。在我的工作计算机上,我安装了 Office 365。在 about 选项卡中显示 Microsoft Outlook for Microsoft 365 MSO (16.0.12827.20200) 32-bit

到目前为止,根据我所阅读的内容,我尝试在 IIS 而不是 IIS Express 中运行我的原型项目,但这并没有解决问题。我是否需要安装特定版本的 Outlook 或某些重新分发文件?或者有更好的方法吗?

【问题讨论】:

    标签: c# outlook office-interop email-templates oft


    【解决方案1】:

    错误:System.IO.FileNotFoundException:无法加载文件或程序集“office,版本=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c”。该系统找不到指定的文件。文件名:'office,Version=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c'

    看来您也只需要引用office.dll 程序集。例如,在 COM 引用部分搜索 Microsoft Office library

    另外,我注意到您在 IIS 下运行该解决方案。

    到目前为止,根据我所阅读的内容,我已经尝试在 IIS 而不是 IIS Express 中运行我的原型项目,但这并没有解决问题。

    这是微软对此的声明:

    所有当前版本的 Microsoft Office 都经过设计、测试和配置,可作为最终用户产品在客户端工作站上运行。他们假设一个交互式桌面和用户配置文件。它们不提供满足设计为无人值守运行的服务器端组件需求所需的重入性或安全性级别。

    Microsoft 目前不推荐也不支持任何无人值守、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)的 Microsoft Office 应用程序自动化,因为 Office 可能表现出不稳定Office 在此环境中运行时的行为和/或死锁。

    Considerations for server-side Automation of Office 文章中了解更多信息。

    您的选择如下:

    • 使用可在服务下运行的低级 API - 扩展 MAPI 或 EWS,请参阅 Start using web services in Exchange 了解更多信息。
    • 使用为服务器端执行而设计的第三方组件。

    注意,[MS-OXMSG]: Outlook Item (.msg) File Format 在 MSDN 中有描述。

    【讨论】:

    • 感谢您的帮助。我试过这个,但它对我不起作用。我找到了一个库,尽管downloads.aspose.com/email/net 确实将图像读入了正文
    • 这正是我在描述Use third-party components designed for the server-side execution.时的意思
    【解决方案2】:

    我无法让他进行互操作,但找到了一个可行的第三方解决方案:https://downloads.aspose.com/email/net

    thisnuget 包将正确读取包括图像在内的正文内容,而无需使用互操作。

    【讨论】:

      【解决方案3】:

      在 .NET Core 中使用互操作类型时,使用 COM 引用到特定的 Office 对象库而不是 NuGet 包

      并将 Embed Interop TypesCopy Local 设置为 Yes

      更多详情请见.NET core 3.0 and MS Office Interop

      【讨论】:

        猜你喜欢
        • 2012-04-28
        • 2013-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多