I solved it by using versioning, I found no other way.
I wanted to have several "instances" of the same biztalk application running together but with different configurations (not just different bindings) to simulate different environments but using the same biztalk instance. So it could interact with other pieces of software also replicated in the same machine and also external systems representing themselves the same environments and also different databases.
The problem was I had to use different conection strings to define different DBs, each one for each of the environments in the BTSNTSvc.Exe.Config file. But since the assemblies were the same, I had no way to make each biztalk application use it's own connection string, unless each assembly knew in runtime how to make that decision (by knowing to which environment it belonged, for example).
So right now, I have scripts that compile and deploy multiple versions and change the name of the connection string to use and also the versions of the assemblies (using compilation symbols).
Thanks for your help.