c# - 使用 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.dll
、Microsoft.Vbe.Interop.dll
和. 我应该将它们与我的应用程序打包在一起吗?office.dll
stdole.dll
它可能是上述的组合吗?
很抱歉问了这么多问题,但我真的迷路了。
有没有办法使用不同版本的 Office 测试应用程序,而无需在某处购买和安装它们?
解决方案
有没有办法使用不同版本的 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,而不会调用最新版本。
推荐阅读
- html - 使用 ion-slide 时页面不会滑到下一页
- c# - Wix ServiceInstall 指定帐户
- asp.net-core - 没有正则表达式的 ASP.NET Core 2.1 中的 URL 重写
- java - Java - 将实体转换为 wsimport 对象
- angular - 最佳从 EventEmitter 事件重新进入 ngZone
- sql - 为什么 MS-SQL-Server(所有版本)将 1.0/12.0 转换为 numeric(8,6)?
- c# - HTTP Post 从数据中删除内容
- python - APScheduler 作业 ID:为什么允许作业共享 ID?
- javascript - 从网站下载由 Qt 中的 Javascript 创建的文件
- oracle - 如何在oracle中连接一个字段中的行,并查询多个表