Приложение написанное под конкретную версию фреймворка тебует наличие именно этой версии, т. к. в проекте имеются Reference на конкретные версии библиотек. И если эти библиотеки отсутствуют, то будет выдаваться сообщение что не удалось загрузить сборку с таким-то именем, такой-то версии.
Установщик 3.5 фреймворка проверяет что уже установлено на компе. Если ничего, то ставит версии 2.0, 3.0, 3.5. Если, скажем как Висте, уже стоит версия 2.0, то будут установлены 3.0 и 3.5. В семерку уже включен полный пакет - начиная версией 1.0 и заканчивая 3.5 SP1.
Поэтому прога версии 2.0 будет работать на 3.5 фреймворке, но не за счет backward-compatibility, а за чсчет того что там уже стоит фреймворк 2.0.
И в этом плане Григорий Ференчук прав, что каждая новая версия дополняет предыдущую.
Кому интересно что содержат в себе фреймворки - вот картинка:
