Чи можу я використовувати C # 4.0 із цільовою рамкою, встановленою на .NET 3.5, щоб розробити розширення для ArcMap 9.3? Або це повинно бути C # 3.0 або раніше?
Чи можу я використовувати C # 4.0 із цільовою рамкою, встановленою на .NET 3.5, щоб розробити розширення для ArcMap 9.3? Або це повинно бути C # 3.0 або раніше?
Відповіді:
Коротка відповідь: На мій досвід, не повинно виникнути жодних проблем при розробці коду на основі .NET 3.5 для ArcGIS 9.3 в Visual Studio 2010 (з мовою C # 4), якщо ви чітко орієнтуєтесь на .NET Framework 3.5. Версія мови C # тут здебільшого не має значення.
PS: Ця відповідь не входить у відмінності між розробкою розширення ArcGIS для версій 9.3 та 10. (ESRI внесла досить великі зміни в модель надбудови, але я припускаю, що ви знаєте про це .)
Більш довга відповідь: Вам потрібно розрізняти версію мови C # та цільову версію Framework.
Ви можете подумати про .NET Framework як про дві основні частини: CLR (загальна мова виконання) та BCL (Бібліотека базових класів). Перший - це "віртуальна машина", а останній - бібліотека класів (містить усі типи, які можна шукати на MSDN).
.NET Frameworks 2 до 3.5 всі використовують один і той же CLR (версія 2), тобто середовище виконання насправді не еволюціонувало. Однак, що розвинулося, це BCL. Якщо ви запускаєте додаток .NET 3.5 на машині .NET 2, основною проблемою буде не те, що "байт-код" (CIL) буде несумісним (він не буде), а в тому, що програма може посилатися і використовувати типи, які ще не були доступні в .NET 2 BCL.
Тепер, коли ви скажете Visual Studio 2010 орієнтуватися на .NET Framework 3.5, він переконається, що ви не будете використовувати типи BCL з будь-якої пізнішої версії Framework. Він також переконається, що для виведення коду компілятором C # не потрібні функції, доступні лише у CLR версії 4.
Мовна версія C # має дуже мало спільного з усім цим. Що компілятор C # дійсно робить це, щоб взяти ваш вихідний код і перекласти його на набагато нижчий рівень мови програмування, який називається CIL (Common Intermediate Language). Деякі конструкції мови C # більше не будуть впізнавані в CIL: Наприклад, yield return
і yield break
не існують у CIL. Вони просто переводяться в реалізацію IEnumerator<T>
інтерфейсу.
Підсумовуючи це: Версія мови C # стає неактуальною, як тільки ваш код складений. Що це важливо ...
чи сумісний вихідний CIL / "байт-код" з цільовим .NET Framework (якщо ви орієнтуєтесь на .NET 3.5, він буде сумісний навіть з .NET 2 з причин, зазначених вище); і
чи стосується ваш код / використовує типи, доступні в цільовій структурі.
Один помітний виняток (в тому сенсі, що конструкція мови C # вимагає певної версії фреймворку; це був останній випадок, коли введені дженерики IIRC) може бути ключовим словом C # dynamic
. Це може бути складено з коду, який вимагає типів з System.Dynamic
простору імен, який доступний лише з .NET 4. Але не хвилюйтеся: якщо ви налаштували проект Visual Studio 2010 для націлювання на .NET 3.5, вам слід отримати помилка компілятора, якщо ви намагаєтесь використовувати матеріали, які недоступні або сумісні з цією конкретною версією .NET Framework.
Майте на увазі, що VS2010 не підтримує IDE для розробки 9.3. Ви не отримаєте будь-яких посилань на збірку, довідку чи інтеграцію шаблонів.
Однак ви можете змусити його працювати: http://forums.arcgis.com/threads/29935-VS2010-with-version-9.3.1