How to maintain different versions of the same application?

How to maintain different versions of the same application?

For every customized version of the application maintain separate branches. Any good SCM tool will do really well with merging branches (Git comes to mind). Any updates in the master branch should be merged into the customized branches, but client specific code can stay in its own branch.

How to make the common code a separate project?

Make the common code a separate project that produces a library or project skeleton artifact. Each customer project is a separate project which then depends on the common one as a dependency.

Do you need to separate your software into modules?

Although our software is modularized to a degree, it’s almost certain that we need to adjust every module’s business logic here and there a little for each customer. The changes are probably too tiny to justify splitting the module into a distinct (physical) module for each client, I fear problems with the build, a linking chaos.

How do you manage the underlying codebase for a versioned API?

Changes that are largely orthogonal to the rest of the codebase: the public API can exist peacefully with the rest of the stack without requiring “excessive” (for whatever definition of of that term you choose to adopt) branching in code I did not find it overly difficult to remove deprecated versions using this model:

How to treat versioning as a deployment issue?

Treat versioning as part of your solution architecture instead of a deployment issue – probably using some combination of namespaces and routing to make sure requests are handled by the correct version.

How to load multiple versions of the same assembly?

There are more ways of loading multiple versions of the same assembly into a single application domain. All of them require the assemblies to be strong-named to avoid identity conflicts. Install Assembly to Global Assembly Cache – an easy way, only to be recommended for production environments.

Where can I find product compatibility and downloads?

The Product Compatibility and Downloads Center can help you find product-related downloads including firmware, release notes, associated software, drivers, tools and utilities.

Do you need to store software for all clients?

Store software for all clients in a single branch. There’s no need to diverge the changes made for different clients. Most lilkely, you’ll want your software to be of best quality for all the clients, and the bugfix to your core infrastructure should affect everyone without unnecessary merging overhead, which also may introduce more bugs.

Can you run different versions of Java on the same computer?

For example, you may have an older application that requires Java 5 where the Ignition client or designer requires Java 6 or higher. Of course you can use multiple versions of Java under Windows and different applications can use different Java versions.

When to use different versions of the same DLL?

Sometimes, we get to a point where different parts of our application depend on different versions of the same DLL. And by “the same”, we mean assemblies with the same simple assembly name. In many cases, when there were no breaking changes between the versions, this situation doesn’t pose a problem.