С# 2.0, потребляющие сборки, скомпилированные с С# 3.0

Это должно быть хорошо видно, поскольку CLR на самом деле не изменилась?

В ящиках с кодом С# 2.0 есть.NET 3.5 выкатился.

Фон состоит в том, что у нас есть служба Windows (.NET 2.0 exe ​​построена на VS2005, развернута до ~ 150 серверов), которая динамически загружает сборки (почти как плагины) для заполнения различных заданий, заданных об этом. Всякий раз, когда мы развертываем новую версию логики шины, мы просто бросаем сборки на FTP-сервер, и служба Windows знает, как проверить, захватить и сохранить последние версии. Новые сборки теперь построены с использованием VS2008 и нацелены на .NET 2.0, мы знаем, что все работает нормально. Однако мы хотели бы воспользоваться преимуществами языковых функций С# 3.0, таких как LINQ, и нацеливать сборки на .NET 3.5, не создавая и не развертывая новую версию службы Windows.

Ответ 1

С# 3 и .Net 3.5 добавляет новые сборки, но IL не изменяется.

Это означает, что с сборками .Net 2 вы можете скомпилировать и использовать С# 3, если вы не используете Linq или что-либо еще, что ссылается на System.Linq или System.Core

yield, var, синтаксис лямбда, типы анонов и инициализаторы - все это умение компилятора. IL, которые они производят, являются кросс-совместимыми.

Если вы можете ссылаться на новые сборки для 3.5, все должно работать.

Нет новой версии ASP.Net - она ​​должна быть 2.0.50727 - но вы все равно должны скомпилировать для 3.5

Ответ 2

yield, var, lambda syntax, anon types и инициализаторы - это все компиляторы сообразительности. ИЛ, которые они производят, является кросс-совместимый.

Малая точка выбора нит, но в любом случае выход был 2.0.

Ответ 3

Это интересный материал. Я смотрел LinqBridge вчера, когда кто-то на этом форуме предложил мне это, и они делают подобное.

Мне кажется странным, что Microsoft назвала фреймворки 2.0, 3.0 и 3.5, когда все они скомпилированы, чтобы создать тот же IL, что требуется для CLR 2.0. Я бы подумал, что добавление версий на 2.0 было бы более разумным, так как я полагаю, что также трудно заставить людей задуматься о том, что существуют разные версии исполняемых файлов, компиляторов и языков.