我正在Visual Studio 2010/.NET 4中开发一个小程序(dll),该程序通过COM互操作与外部应用程序(我们称之为ExApp)集成。我自己使用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安装程序,以便只需要一个install.exe?意味着安装程序将检测ExApp的版本,并安装相应版本的my.dll
和Interop.ExApp.dll
。
还有一个额外的问题:由于ExApp API没有发生有意义的变化,我如何编译一个版本的my.dll
来使用任何安装的ExApp版本?
为什么不使用3个不同的文件名构建互操作,然后在应用程序中创建一个工厂模式来决定在运行时使用哪个提供程序?
我可以向您展示搜索系统以安装3个互斥文件中的一个的方法,但我认为这种复杂性不属于安装程序。如果有人升级了您正在创建互操作的应用程序,它无论如何都会崩溃。
在项目的引用中,dll的Specific Version
设置为True还是False?如果设置为True,则可以尝试将其设置为False。
这显然不会阻止新版本的中断(API更改),但无论如何,目前的情况似乎是