Я разрабатываю дополнение для Microsoft Excel, с помощью Visual Studio.NET 2008.
Дополнение создает единственную кнопку на панели инструментов, которая может быть нажата для запуска формы, которая может привыкнуть к добавленным стоимостям от базы данных в ячейки активной электронной таблицы.
1) Требование - то, что инструмент доступен и в Excel 2003 и в в 2007.
2) Другое требование то, что, в Excel 2007, кнопка запуска быть на ее собственной ленточной вкладке.
Из-за ленточного требования вкладки я создал два отдельных дополнительных проекта Excel в рамках Visual Studio - один для каждой версии офиса.
Однако, потому что эти два дополнения должны сослаться на два других Office. Блоки Interop и проект, обеспечивающий форму запросов базы данных, могут только сослаться один, я нахожу меня не могущим совместно использовать этот третий блок между двумя дополнительными проектами.
У кого-либо есть простое решение, чем поддержание отдельной копии кода формы для каждой из двух дополнительных версий?
Спасибо.
Есть два варианта:
Вариант 1: Не ссылаться на какие-либо сборки взаимодействия в общем проекте, предоставляющем запрос к базе данных. Используйте интерфейсы и внедрение зависимостей , чтобы предоставить требуемый код взаимодействия с Excel из проектов надстроек.
Позвольте мне привести пример: предположим, что ваш общий проект должен выполнять некоторую функцию func , которой нужен доступ к библиотекам взаимодействия.Вы можете создать интерфейс в своем общем проекте:
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
}
}
Аналогичным образом вы создаете Excel2007Interface
в своей надстройке Excel 2007.
Затем при открытии формы в общем проекте вы передаете экземпляр Excel2003Interface
или Excel2007Interface
, который используется формой для вызова func
]:
void DoSomething(ExcelInterface iface) { // this is in your shared project
...
iface.func();
...
}
Вариант 2: Используйте малоизвестную функцию файла ссылок Visual Studio для совместного использования кода двумя проектами надстроек.