Может ли установщик Windows развернуть сборку на основе версии внешнего приложения? - PullRequest
0 голосов
/ 25 января 2012

Я разрабатываю небольшую программу (dll) в Visual Studio 2010 / .NET 4, которая интегрируется с внешним приложением (назовем его ExApp) через взаимодействие COM.Я сам генерирую сборки взаимодействия, используя TlbImp.exe, поскольку ни одно из них не предоставлено внешним приложением.ExApp поставляется в трех популярных версиях, каждая из которых имеет фактически идентичный API, но каждая имеет разный (и несовместимый) сгенерированный dll взаимодействия.На данный момент это означает, что у меня есть три отдельных установщика:

  • Установщик w / my.dll встроенный / связанный с Interop.ExApp.dll v1
  • Установщик w / my.dll встроенный / связанныйпротив Interop.ExApp.dll v2
  • Установщик w / my.dll построен / связан с Interop.ExApp.dll v3

Должно быть лучшее решение, чем это.

Какнастроить установщик Visual Studio / Windows так, чтобы мне был нужен только один установочный .exe?Это означает, что установщик обнаружит версию ExApp и установит соответствующие версии my.dll и Interop.ExApp.dll.

И дополнительный вопрос: поскольку API ExApp не претерпел существенных изменений, как я могу скомпилировать его?версия my.dll для работы с любой установленной версией ExApp?

Ответы [ 2 ]

1 голос
/ 25 января 2012

Почему бы вам не создать взаимодействия с 3 различными именами файлов, а затем создать шаблон приложения в вашем приложении, чтобы решить, какого поставщика использовать во время выполнения?

Я мог бы показать вам способы поиска в системе, чтобы установить один из 3 взаимоисключающих файлов, но я не думаю, что такая сложность относится к установщику. И в любом случае он развалится, если кто-то обновит приложение, для которого вы создаете взаимодействие.

1 голос
/ 25 января 2012

В справочниках вашего проекта dll's Specific Version установлено в True или False? Вы можете попробовать установить его в False, если он установлен в True.

Это, очевидно, не помешает взлому более новой версии (изменения API), но в любом случае, похоже, это так и есть

...