From .NET 2.0 to .NET 3.0 we have 100% binary compatibility. This is because none of the .NET 2.0 binaries were changed for that update.
From .NET 3.0 to .NET 3.5 we an extremely high level of compatibility with existing applications. This is an estimated 95% binary compatibility without a recompile being required. The last estimated 5% is recommended to be found by testing and the incompatibilities are a result of bug fixes, performance improvements, geo political fixes and security fixes introduced in services packs .NET 2.0 SP1 and .NET 3.0 SP1 as part of the .NET 3.5 upgrade.