首页 > 解决方案 > 使用 Microsoft.Office.Interop 分发应用程序的最佳实践

问题描述

我有一个创建和操作 Excel 文件的应用程序。它是用 vb.net 编写的,可以想象打开 Excel,创建文件,填充它,在 Excel 中显示这个文件(有点类似的例子)。

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

我应该使用我能得到的最旧的互操作 dll(Office 2010 似乎相当旧)并按照建议嵌入互操作类型吗?在这种情况下,app 文件夹中没有额外的 dll,我是否可以安全地假设它可以在安装 Office >=2010 的任何地方工作?

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

它可能是上述的组合吗?

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

有没有办法使用不同版本的 Office 测试应用程序,而无需在某处购买和安装它们?

标签: c#.netexceloffice-interop

解决方案


有没有办法使用不同版本的 Office 测试应用程序,而无需在某处购买和安装它们?

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

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

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

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

Embed Interop Types您可以考虑在 COM 引用上设置属性,而不是部署单独的互操作程序集。在 Visual Studio 中嵌入互操作类型 true 和 false有什么区别?线。是部署单独的程序集还是使用此选项取决于您。两种方式都可以接受。

我应该使用最古老的互操作 dll 吗?

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


推荐阅读