C# Dot-Net中的可选引用

C# Dot-Net中的可选引用,c#,.net,vb.net,visual-studio,reference,C#,.net,Vb.net,Visual Studio,Reference,我希望这可能是.Net中的一个高级概念 我的问题是 如何设置带有可选参考的程序 例如:考虑这种情况, 我有一个能够将数据导出到Excel的程序。 此功能需要参考Microsoft Office Excel(某些特定版本) 是否有任何方法可以编写一个无论是否安装Excel都可以运行的程序,但是只有在安装Excel的情况下才能执行某些特定选项(如读取或写入Excel) 即使未安装Excel,程序也应运行 谢谢。有两种基本方法 Assembly.Load允许您在运行时加载任意程序集、检查其内容、实例化

我希望这可能是.Net中的一个高级概念
我的问题是

如何设置带有可选参考的程序

例如:考虑这种情况, 我有一个能够将数据导出到Excel的程序。
此功能需要参考Microsoft Office Excel(某些特定版本)

是否有任何方法可以编写一个无论是否安装Excel都可以运行的程序,但是只有在安装Excel的情况下才能执行某些特定选项(如读取或写入Excel)

即使未安装Excel,程序也应运行


谢谢。

有两种基本方法

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

  • 您可以使用MicrosoftManagedExtensibilityFramework,它可以完成所有这些以及更多功能。看

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


    无论你走哪条路,都会有相当多的代码需要编写。问题中没有足够的细节可以说得更多,但这不仅仅是设置“可选”标志的问题。

    您必须使用
    Assembly动态加载它。加载…
    在尝试创建实例或工作表时使用Try/Catch(动态)并在失败时设置一个变量,例如
    HasExcel=False
    。那么,如果你的代码中有Excel,那么它只是一堆
    语句。@puropoix我不认为它这么简单,因为如果无法加载Excel PIA(没有一些代码来处理该故障),应用程序将不会运行。不,不是为了做Excel相关的事情;但对于程序流(即不调用Excel相关程序),启用按钮、菜单等正是我提供它的目的。问题是-导出数据不需要引用Excel。您可以使用Microsoft.Ace.Oledb将数据写入excel。