Dot Net中的可选引用

4
我希望这是一个在 .Net 技术中高级的概念。
我的问题是: 如何设置一个带有可选引用的程序? 例如:考虑以下情况,我有一个能够将数据导出到 Excel 的程序。这个功能需要引用 Microsoft Office Excel(某个特定版本)。
是否有一种方法可以编写一个程序,无论 Excel 是否安装,都可以运行,但仅当安装了 Excel 时才执行某些特定选项(如读取或写入 Excel)。
程序应该在没有安装 Excel 的情况下运行。
谢谢。

3
您需要使用 Assembly.Load... 进行动态加载。 - Daniel A. White
在尝试动态创建实例或工作表时,请使用Try/Catch,并在失败时设置一个变量,例如HasExcel = False。然后在您的代码中只需一堆If HasExcel Then语句即可。 - Ňɏssa Pøngjǣrdenlarp
@Plutonix,我觉得情况并不简单,因为如果无法加载Excel PIA(没有代码来处理故障),应用程序将无法运行。 - D Stanley
不是用于处理 Excel 相关工作;而是用于程序流程(即不调用 Excel 相关过程),使按钮、菜单等变为可用状态,这就是我所提供的。 - Ňɏssa Pøngjǣrdenlarp
事实是 - 您并不需要引用Excel来导出数据。您可以使用Microsoft.Ace.Oledb将数据写入Excel。 - T.S.
1个回答

1
有两种基本方法。
  1. Assembly.Load 允许您在运行时加载任意程序集,检查其内容,实例化对象,调用方法等。通常您会将其隐藏在接口、默认实现、工厂方法等背后。依赖注入可能依赖于这些技术。

  2. 您可以使用 Microsoft 托管可扩展性框架(MEF),它可以完成所有这些操作以及更多操作。请参见 http://msdn.microsoft.com/en-AU/library/dd460648%28v=vs.110%29.aspx

Excel 是一个特殊情况,因为它可以通过 COM 自动化访问,这提供了其他机会并可能增加一些复杂性。通常您可以构建和运行程序,因为包装器程序集将存在,并且如果 Excel 不存在,则在运行时处理执行失败。

无论选择哪种方式,都需要编写相当数量的代码。问题中没有足够的细节来进一步说明,但这不仅仅是设置“可选”标志的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接