【问题标题】:Deploy Windows Form部署 Windows 窗体
【发布时间】:2015-07-09 12:48:24
【问题描述】:

我有一个可以在我的机器上正常工作的 Windows 窗体,我参考了 Excel 2007 的 Microsoft.Interop 程序集。某些机器将同时安装 Excel 2000 和 Excel 2007,如果 Excel 2007 未设置为“默认”版本的 Excel 的 windows 窗体将引发错误并且无法正常工作。他们是我可以“打包”我的 Windows 表单以使其在安装了 2000 和 2007 的机器上无错误运行的一种方式吗?

【问题讨论】:

  • 我认为这会很困难,因为互操作 DLL 是从 GAC 加载的,因此您无法“部署”该 DLL - 它必须已经存在。如果您不需要与 Excel 进行“实时交互”,那么有一些库可以让您在不调用 Excel 的情况下读取/写入 Excel 文件,请参阅stackoverflow.com/questions/9155642/…
  • 呃,一个 15 年前的 Excel 版本,可能会出什么问题?当然,不要告诉我们,没关系。
  • @HansPassant - 你需要澄清什么信息?
  • @Charlie - 不幸的是,我确实需要实时交互,所以我无法使用 Interop dll

标签: c# winforms deployment


【解决方案1】:

您目前正在使用早期绑定来访问 Excel。这是您在编译之前在项目中嵌入对互操作的引用的地方。

优势

  • 编译器知道 Excel 的版本
  • 我们知道方法存在以及它们在哪里,因此执行速度更快
  • 允许我们使用智能感知来检查参数是否正确以及返回类型是否正确

缺点

  • 仅支持 Excel 的嵌入式版本

您需要查看后期装订。这是互操作根本不包含在项目中的地方,而是稍后通过反射绑定的。为了能够支持多个 Excel 版本,您基本上权衡了上述所有优势。

网上有很多关于如何做的指南。

How to use use late binding to get excel instance?
C# : Late Binding Excel Interop Tutorial
Word Automation using Late binding - Usage of dynamic Keyword

我的两分钱

我必须回应 Hans 的评论,这是个坏主意。尝试支持 15 年前的 Excel 版本会让人头疼,我认为您很快就会避免这样做。

除非您完全决定这样做,否则您可以查看像 EPPlus 这样的第三方库。或者,如果您只需要阅读表格,请以其他方式 like ODBC 并完全避免这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多