Сценарий
У меня есть две оболочки для Microsoft Office, одна для 2003 и одна для 2007. Поскольку две версии Microsoft Office, работающие бок о бок, «официально не возможны» и не рекомендуются Microsoft, у нас есть две коробки, одна с Office 2003, а другая с Office 2007. Мы компилируем обертки отдельно. Библиотеки DLL включены в наше решение, каждая ячейка имеет одинаковую проверку, но с "выгруженным" Office 2003 или 2007, поэтому он не пытается скомпилировать эту конкретную DLL. Невыполнение этого требования приведет к ошибкам компиляции из-за недоступности библиотек DLL Office COM.
Мы используем .NET 2.0 и Visual Studio 2008.
Факты
Поскольку Microsoft загадочным образом изменила API Office 2003 в 2007 году, переименовав и изменив некоторые методы (вздох), что сделало их несовместимыми с обратной связью, нам нужны две оболочки. У нас есть каждая машина для сборки с решением и активирована одна Office DLL. Например: на компьютере с Office 2003 выгружена DLL "Office 2007", поэтому она не компилируется. Другая коробка - та же идея, но наоборот. И все это потому, что для программирования не может быть двух разных Office в одной коробке. (технически вы можете иметь два Office вместе, согласно Microsoft), но не для программирования и не без некоторых проблем.
Проблема
Когда мы меняем версию приложения (например, с 1.5.0.1 на 1.5.0.2), нам нужно перекомпилировать DLL, чтобы она соответствовала новой версии приложения, это происходит автоматически, поскольку оболочка Office включена в решение. Поскольку оболочки содержатся в решении, они наследуют версию приложения, но мы должны сделать это дважды, а затем «скопировать» другую DLL на машину, которая создает установщик. (Боль…)
Вопрос
Можно ли скомпилировать DLL, которая будет работать с любой версией приложения, несмотря на то, что она «старая»? Я кое-что читал о манифестах, но мне никогда не приходилось с ними взаимодействовать. Будем признательны за любые указатели.
Секретная причина этого заключается в том, что мы не меняли наши оболочки за «долгие годы», как и Microsoft с их древними API-интерфейсами, но мы перекомпилируем DLL, чтобы она соответствовала версии приложения в каждом выпуске, который мы выпускаем. . Я хотел бы автоматизировать этот процесс вместо того, чтобы полагаться на две машины.
Я не могу удалить DLL из проекта (ни один из них), потому что есть зависимости.
Я мог бы создать третью «мастер-обертку», но еще не думал об этом.
Любые идеи? Кто-нибудь еще с таким же требованием?
ОБНОВИТЬ
Уточнение:
У меня есть 1 решение с N проектами.
«Приложение» + Office11Wrapper.dll + Office12Wrapper.dll.
Обе «оболочки» используют зависимости для приложения + других библиотек в решении (уровень данных, бизнес-уровень, фреймворк и т. Д.)
Каждая оболочка имеет ссылки на соответствующий пакет Office (2003 и 2007).
Если я компилирую и не установил Office 12, я получаю сообщение об ошибке Office12Wrapper.dll, не находя библиотеки Office 2007. Итак, у меня есть две строительные машины, одна с Office 2003, одна с Office 2007. После полного обновления SVN + компиляции на каждой машине мы просто используем office12.dll в «установщике», чтобы оболочка скомпилировалась с «той же самой». код той же версии ".
Примечание. Машина сборки Office 2007 имеет "выгруженную" оболочку для Office 2003 и наоборот.
Заранее спасибо.