Over time you might need to make changes to a custom component, for instance because you needed to optimize or refactor the code, implement new features, or replace the external assemblies. As long as the interface of the component (its custom properties and its inputs and outputs) remain unchanged in a later version, you simply deploy the new version to the destination environments, register it in the GAC, and the new version of the component will be used the next time the package is executed or edited in SSDT. You do not even have to modify its version number.
However, if the change affects the components interface - for instance, if you need to add, remove, or modify any of its custom properties - you need to make the component upgradable. This upgrade is performed automatically - at design time or at run time - by invoking a special design...