C # 4.0'ı ArcMap 9.3 için bir uzantı geliştirmek üzere .NET 3.5'e ayarlanmış hedef çerçeveyle kullanabilir miyim? Yoksa C # 3.0 veya öncesi olmalı mı?
C # 4.0'ı ArcMap 9.3 için bir uzantı geliştirmek üzere .NET 3.5'e ayarlanmış hedef çerçeveyle kullanabilir miyim? Yoksa C # 3.0 veya öncesi olmalı mı?
Yanıtlar:
Kısa cevap: Tecrübelerime göre, açıkça .NET Framework 3.5'i hedeflediğiniz sürece Visual Studio 2010'da (C # dil sürüm 4 ile) ArcGIS 9.3 için .NET 3.5 tabanlı kod geliştirirken hiçbir sorun olmamalıdır. C # dili sürümü burada çoğunlukla önemsizdir.
Not: Bu cevap, 9.3 ve 10 sürümleri için bir ArcGIS uzantısı geliştirme arasındaki farklılıklara girmiyor. (ESRI, eklenti modelinde birkaç önemli değişiklik yaptı, ancak bunun farkında olduğunuzu varsayıyorum. .)
Daha uzun yanıt: C # dili sürümü ile hedeflenen Çerçeve sürümü arasında ayrım yapmanız gerekir.
.NET Framework'ü iki ana bölümden oluşur: CLR (Ortak Dil Çalışma Zamanı) ve BCL (Temel Sınıf Kütüphanesi). Birincisi "sanal makine", ikincisi ise sınıf kütüphanesidir (MSDN'de arayabileceğiniz tüm türleri içerir).
.NET Frameworks 2 3.5'e kadar hepsi aynı CLR'yi (sürüm 2) kullanır, yani yürütme ortamı gerçekten gelişmemiştir. Ancak gelişen şey BCL'dir. Bir .NET 2 makinesinde bir .NET 3.5 uygulaması çalıştırıyorsanız, asıl sorun "bayt kodu" (CIL) uyumsuz olacak (olmayacak), ancak uygulamanın başvurabileceği ve kullanabileceği .NET 2 BCL'de henüz bulunmayan türler.
Şimdi, Visual Studio 2010'a .NET Framework 3.5'i hedeflemesini söylediğinizde, daha sonraki bir Framework sürümünden BCL türlerini kullanmayacağınızdan emin olursunuz. Ayrıca, C # derleyicisinin kod çıktısının yalnızca CLR sürüm 4'te bulunan özellikler gerektirmeyeceğinden emin olacaktır.
C # dil sürümünün tüm bunlarla çok az ilgisi vardır. C # derleyicisinin kaynak kodunuzu alıp CIL (Common Intermediate Language) adı verilen çok daha düşük düzeyli bir programlama diline çevirmek için yaptığı şey. Belirli C # dil yapıları artık CIL'de tanınmayacaktır: Örneğin yield return
ve yield break
CIL'de mevcut değildir. Bunlar sadece IEnumerator<T>
arayüz uygulamalarına çevrilir .
Özetlemek gerekirse: Kodunuz derlendiğinde C # dili sürümü önemsiz hale gelir. Ne olduğunu önemli ...
çıktı CIL / "bayt kodu" hedeflenen .NET Framework ile uyumlu olup olmadığı (.NET 3.5'i hedeflerseniz, yukarıda belirtilen nedenlerle .NET 2 ile bile uyumlu olacaktır); ve
kodunuzun hedef çerçevede kullanılabilen türlere karşılık gelip gelmediğini / kullanıp kullanmadığını.
Dikkate değer bir istisna (bir C # dil yapısının çerçevenin belirli bir sürümünü gerektirmesi anlamında; bu, jeneriklerin IIRC'nin tanıtıldığı durumdur) C # anahtar sözcüğü olabilir dynamic
. System.Dynamic
Yalnızca .NET 4'ten beri kullanılabilen ad alanından türler gerektiren kodlar için derlenebilir . Ancak endişelenmeyin: Visual Studio 2010 projenizi .NET 3.5'i hedefleyecek şekilde ayarladıysanız, .NET Framework sürümünde bulunmayan veya bunlarla uyumlu olmayan şeyler kullanmaya çalışıyorsanız derleyici hatası.
VS2010'un 9.3 geliştirme için desteklenen bir IDE olmadığını unutmayın. Herhangi bir montaj referansı, yardım veya şablon entegrasyonu alamazsınız.
Ancak bir şekilde çalışmasını sağlayabilirsiniz: http://forums.arcgis.com/threads/29935-VS2010-with-version-9.3.1