This type information implicitly represents compile-time assumptions about the resources available at run-time. However, at run-time, different resources may actually be available. For example, the execution environment on a mobile phone might provide fewer, simpler classes than on a desktop PC.
We have designed and implemented a flexible dynamic linking scheme that supports the run-time selection of .NET assemblies and classes. This enables a regime of compile once, run anywhere. We describe the scheme's integration with the .NET linking infrastructure, review important design decisions and report on experiences with the Rotor shared source version of .NET.