Hi Piers,
in my opinion several different but closely related topics are mentioned in your post and they should be discussed separately. Also I guess there is no one simple answer, because how to put all pieces together (compilation agains specific SDK version versus MicroStation runtime version) is driven by a business decision.
[quote user="Piers Porter"]1. It is not possible to have two versions of MicroStation V8i simultaneously installed for testing.[/quote]
Unfortunately it's true and there is no simple solution for it. Even though you will limit number of tested versions for "main versions" like SS1, SS2, SS3 (because all Update X and SS4 should be compatible with original SS3), virtualization on desktop or e.g. Azure virtual machines are required. It's alway about a balance between how important are users of older versions comparing to cost of their maintenance.
[quote user="Piers Porter"]2. It is not possible to have two versions of the MicroStation V8i SDK simultaneously loaded for compiling.[/quote]
It's not quite true. It's possible to have different SDK versions in parallel, but it's not straightforward. I copied out MicroStation folders (MicroStation + SDK installed, but can be used for other products also) into own folders, so I have all main V8i versions in parallel. They are not functional (cannot be used for testing), but provide all necessary files for full compilation (both native and managed code) and it's just about environment setting what SDK will be used.
[quote user="Piers Porter"]I can't find a simple way to conditionally load one set of binaries over another through a pre-defined MicroStation configuration variable.[/quote]
I am not quite sure what do you meanin this point. Are you asking how to load the same application from folder A1 if SS1 is used and from folder A3 if SS3 is used? In such case I have to agree, there is probably no simple way.
On the other hand I don't know why this would be necessary. If different versions of MicroStation have to be supported, there have to be separate application built for every MicroStation version (or group of versions like e.g. "all SS3 plus SS4). If there will be one installer, it has to contain all application versions and to install only the correct one. It leads to more complex installer and because I have not too much experience with the installer building, I am not sure how difficult it is, but I see exactly such functionality in the past.
In my opinion it's wise also to implement runtime version check when the application is started. It's better (and cheaper from "help desk cost" perspective) to inform users a wrong version is installed than to solve with the use why the application is crashing and to analyze cryptical exception messages.
[quote user="Piers Porter"]However, given all this, what is the best way to resolve this problem?[/quote]
As I wrote, in my opinion you have to define your own business priorities at first and to investigate what is the best for you.
As an example: Because I develop applications for specific customer typically (and not boxed products), I have no installer, but some my applications have to be compiled for different MicroStation versions. I am able to do it just changing compilation environment settings plus some #ifdef in native code if I use API available only in never versions. At the end I have several different builds of the same application and it's a customer responsibility to use a proper version.
With regards,
Jan