Сборки, использующие код C# 2.0, скомпилированные с помощью C# 3.0

StackOverflow https://stackoverflow.com/questions/9508

  •  08-06-2019
  •  | 
  •  

Вопрос

Это должно быть нормально, поскольку 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.

Это было полезно?

Решение

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

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

yield, var, лямбда-синтаксис, анонимные типы и инициализаторы — все это хитрости компилятора.Производимая ими ИЛ перекрестно совместима.

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

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

Другие советы

Выход, вар, синтаксис Lambda, типы ANON и инициализаторы - все это компилятор.Ил, который они производят, является меж совместимым.

Небольшие придирки, но выход в любом случае был функцией 2.0.

Это интересная вещь.я смотрел на ЛинкБридж вчера после того, как кто-то на этом форуме предложил мне это, и они делают то же самое.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top