【问题标题】:Best practice distributing app using Microsoft.Office.Interop使用 Microsoft.Office.Interop 分发应用程序的最佳实践
【发布时间】:2021-03-18 03:13:27
【问题描述】:

我有一个创建和处理 Excel 文件的应用程序。它是用 vb.net 编写的,可以想象打开 Excel,创建文件,填充它,在 Excel 中显示这个文件 (somewhat similar examples)。

我想分发这个应用程序,但我不知道用户的机器上安装了哪些确切的办公版本。如何获得最大的兼容性?

我应该使用我能得到的最旧的互操作 dll(Office 2010 似乎相当老)和embed interop types as recommended?在这种情况下,app 文件夹中没有额外的 dll,我是否可以安全地假设它可以在任何安装 Office >=2010 的地方工作?

在 Microsoft.Office.Interop.Excel 上设置 CopyLocal=True 会导致 4 个 dll 被复制到应用文件夹中:Microsoft.Office.Interop.Excel.dllMicrosoft.Vbe.Interop.dlloffice.dllstdole.dll。我应该将它们与我的应用打包在一起吗?

可能是以上几种情况的结合?

很抱歉问了这么多问题,但我真的迷路了。

有没有一种方法可以使用不同版本的 Office 来测试应用,而无需在某处购买和安装它们?

【问题讨论】:

  • 您是说最好的做法是用相应的 COM 引用替换 Interop.*.dll 引用吗?但是您链接的答案指出,Office 2013 没有 PIA,而是 now there are - 这增加了混乱。

标签: c# .net excel office-interop


【解决方案1】:

有没有一种方法可以使用不同版本的 Office 来测试应用,而无需在某处购买和安装它们?

如果您不想自己维护测试实验室,可以使用带有预安装 Office 应用程序的 Azure VM。

4 个 dll 被复制到应用文件夹中:Microsoft.Office.Interop.Excel.dll、Microsoft.Vbe.Interop.dll、office.dll 和 stdole.dll。我应该将它们与我的应用打包在一起吗?

库的数量取决于代码 - 使用的功能(类等)。以下是互操作程序集的简要说明:

  • Microsoft.Vbe.Interop.dll -> Microsoft Visual Basic for Applications 可扩展性
  • Microsoft.Office.Interop.Excel.dll -> Microsoft Excel 对象库
  • office.dll -> Microsoft Office 对象库(Office 共享功能)
  • stdole.dll -> 它可以使用“标准”COM 接口,如 IFont 或 IDispatch。似乎对 .NET 中这些接口的支持需要引用 stdole.dll。

您可以考虑在 COM 引用上设置 Embed Interop Types 属性,而不是部署单独的互操作程序集。在What's the difference setting Embed Interop Types true and false in Visual Studio? 线程上阅读更多相关信息。是部署单独的程序集还是使用此选项取决于您。两种方式都可以接受。

我应该使用我能得到的最古老的互操作 dll

是的,最旧的互操作版本是受支持的最低 Office 版本。在这种情况下,您可以确定您的应用程序将使用最旧版本中可用的 API,而不会调用最新版本。

【讨论】:

  • 我昨天晚些时候发现了NetOfficeFw;你知道是使用它还是坚持最古老的 Office 互操作更好?
猜你喜欢
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 2011-09-14
相关资源
最近更新 更多