2010-02-18 38 views
5

我开发的Microsoft Excel的加载项,使用Visual Studio .NET 2008Visual Studio 2008的互操作办事处2003 VS 2007

加载项创建一个单一的工具栏按钮,可以点击发动表单,可用于将数据库中的值添加到活动电子表格的单元格中。

1)的要求是,该工具在两个Excel 2003和2007年

2)另一个要求是,在Excel 2007中,发射按钮将自己的功能区选项卡上可用。

由于功能区选项卡的要求,我在Visual Studio中创建了两个单独的Excel加载项项目 - 每个Office版本都有一个。

但是,由于这两个加载项必须引用两个不同的Office.Interop程序集,并且提供数据库查询表单的项目只能引用一个,所以我发现自己无法在两个加载项项目之间共享此第三个程序集。

有没有人比维护两个加载项版本的每一个的表单代码的单独副本更简单的解决方案?

谢谢。

回答

4

有两种选择:

选项1:不引用任何互操作程序集在共享项目中提供的数据库查询。使用接口和依赖注入从外接项目提供所需的Excel互操作性代码。

让我举一个例子:假设你的共享项目需要执行一些函数func需要访问Interop库。此接口

public interface ExcelInterface { 
    void func(); 
} 

在你的插件项目,你提供实现:你可以在你的共享项目创建一个接口

class Excel2003Interface : ExcelInterface { // located in your Excel 2003 Addin 
    void func() { 
     // the code here can use the Excel 2003 interop reference 
    } 
} 

同样,你在Excel 2007中的插件创建Excel2007Interface

然后,在共享项目打开形式时,则通过其中Excel2003InterfaceExcel2007Interface的一个实例,其中使用由表单调用func

void DoSomething(ExcelInterface iface) { // this is in your shared project 
    ... 
    iface.func(); 
    ... 
} 

选项2:使用豆蔻已知的Visual Studio的link file feature在两个加载项项目之间共享代码。