# Assembly Versioning in SharpDevelop

## How the versions are set

The assemblyInfo.cs files are updated by the tool "UpdateAssemblyInfo". UpdateAssemblyInfo runs as pre-compile target and always sets the number in GlobalAssemblyInfo.cs to the subversion revision number. That number is displayed in the splash screen, error dialog and about dialog. It is also used as assembly version.

The revision number is retrieved by running a function in NSvn.Core.dll equivalent to "svn info" in the "src" folder. When this doesn't work (e.g. in an exported tree like the source code download on the build server), the content of the file src/REVISION is used as revision number. When even this fails, the revision '9999' is used.

## Publisher Policy

While the assembly versioning schema is not so important inside SharpDevelop, it is important for 3rd party addins because the main libraries like ICSharpCode.Core are strong-named. Normally, an assembly compiled against a strong-named assembly can only be used with exactly the version of the library it was compiled with.

This means if a 3rd-party addin was compiled against version 2.1.0.a, it cannot bind to version 2.0.0.b or 2.0.1.c; even if it would run without problems. Therefore, SharpDevelop.exe.config contains binding redirects for the strong-named libraries that addins would want to reference.

The binding redirects always redirect requests of a version in the range from some past version containing large breaking changes to the current version. We will not do such changes anymore after the first release candidate of a SharpDevelop version, so after the release of SharpDevelop x.y RC1, all future SharpDevelop x.y.*.* versions will be in large parts binary compatible.
For example, SharpDevevelop 2.1.0.1708 uses this redirection:

    <bindingRedirect oldVersion="2.1.0.1661-2.1.0.1708" newVersion="2.1.0.1708"/>

That means if you want to release a 3rd-party AddIn (AddIn that is not shipped with SharpDevelop), compile it against the oldest SharpDevelop version you want your AddIn to run with.
An AddIn compiled against 2.1.0.1800 will run with 2.1.0.1801 (and hopefully even with 2.1.23.45678), but an AddIn compiled against 2.1.0.1801 will fail to load in SharpDevelop 2.1.0.1800.