I have a .Net system which 3rd parties can extend when they reference supplied API assemblies. My concerns are with backwards compatability, namely I need to ensure that whenever binary non-breaking changes are made to the supplied API assemblies (for example a method is added):
- Plugins built using the old version should still work when running the new version.
- However plugins built using the new version should not work when running the old version (as otherwise this may lead to runtime failures if the plugin tries to call a method that doesn't exist)
Because of the second requirement I can't simply keep the version numbers the same - the only way I then know of then satisfying requirement 1. is by using binding redirection which requires maintaining a long list of all previous version numbers for all API assemblies. This seems error-prone and tedious.
Is there any alternative strategies for maintaining sensible backwards compatability when dealing with .Net assembly version numbers?