Компилятор C # в 4.0 поставляется с новой функцией многоцелевого доступа. Короткая версия состоит в том, что он будет производить сборку с любой версией метаданных, присутствующей в ссылке, которая определяет System.Object (обычно mscorlib.dll). Это позволяет использовать его для компиляции сборок для 2.0 и 3.5, а также для различных версий Silverlight. Эта функция была введена для поддержки мультитаргетинга в Visual Studio 2010.
Следовательно, вы можете использовать компилятор C # 4.0 для компиляции сборок 3.5 и использовать любые функции C # 4, которые вам нужны, при условии, что нет особой зависимости от библиотек 4.0. Например, именованные аргументы и необязательные параметры будут работать нормально, потому что они не используют какие-либо возможности платформы 4.0. Динамический, однако, делает, и поэтому из коробки это не будет работать на 3.5.
Здесь есть пост об этом, который охватывает основы.
http://blogs.msdn.com/ed_maurer/archive/2010/03/31/multi-targeting-and-the-c-and-vb-compilers.aspx
Краткий список (из сообщения Эда):
- именованные аргументы и необязательные параметры
- некоторые улучшения синтаксиса COM (например, "опустить ref")
- общая дисперсия
Вещи, которые не будут работать, включают в себя динамические и беспроигрышные (два наших самых больших в плане затрат времени на их реализацию). Первый требует поддержки фреймворка, а второй требует поддержки во время выполнения.