Сборки, использующие код C# 2.0, скомпилированные с C# 3.0
Это должно быть хорошо видно, так как CLR на самом деле не изменился?
На блоках с кодом C# 2.0 был развернут.NET 3.5.
Фоном является то, что у нас есть служба Windows (.NET 2.0 exe, созданная с VS2005, развернутая на ~150 серверах), которая динамически загружает сборки (почти как плагины) для выполнения различных заданных заданий. Всякий раз, когда мы выпускаем новую версию логики шины, мы просто сбрасываем сборки на FTP-сервере, и служба Windows знает, как проверять, захватывать и хранить последние версии. Новые сборки теперь создаются с использованием VS2008 и нацелены на.NET 2.0, мы знаем, что это работает нормально. Однако мы бы хотели начать использовать возможности языка C# 3.0, такие как LINQ, и нацеливать сборки на.NET 3.5 без необходимости создания и развертывания новой версии службы Windows.
3 ответа
C#3 и.Net 3.5 добавляет новые сборки, но IL не меняется.
Это означает, что со сборками.Net 2 вы можете компилировать и использовать C#3, если вы не используете Linq или что-либо еще, ссылающееся на System.Linq или System.Core.
yield
, var
, лямбда-синтаксис, типы anon и инициализаторы - все это умный компилятор. IL, который они производят, является кросс-совместимым.
Если вы можете сослаться на новые сборки для 3.5, все должно работать.
Не существует новой версии ASP.Net - она должна быть 2.0.50727 - но вы все равно должны скомпилировать для 3.5
yield, var, лямбда-синтаксис, типы anon и инициализаторы - все это разумно для компилятора. IL, который они производят, является кросс-совместимым.
Незначительная точка слияния, но урожай в любом случае составлял 2,0.
Это интересные вещи. Вчера я смотрел на LinqBridge после того, как кто-то на этом форуме предложил мне это, и они делают то же самое.
Мне кажется странным, что Microsoft назвала фреймворки 2.0, 3.0 и 3.5, когда все они компилируются, чтобы создать тот же IL, который требуется для 2.0 CLR. Я бы подумал, что добавление версий в 2.0 имело бы больше смысла, хотя я полагаю, что людям также сложно понять, что существуют разные версии сред выполнения, компиляторов и языков.