2010-02-18 57 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在兩個加載項項目之間共享代碼。