ArcObjects 9.3 için C # sürümü


10

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ı?


Hedef çerçeve 3.5 ise, uzantıları ile C # 2.0 kullanıyorsunuz. ArcEngine 10'un .NET 3.5'i hedeflemesi gerekir, böylece bazı 4.0 hediyeleri kaçırırsınız. Uygulamamda wpf takvim kontrolü kullanmak istedim, ancak yapamadım çünkü 4.0. Bu yüzden winform'ları kullanmak zorunda kaldım.
patrick

Hedef çerçeve 3.5 olarak ayarlanmış ArcMap 10 için bir uzantı geliştirmek için C # 4.0 kullanıyordum, bu yüzden çerçeve 3.5 kaldığı sürece geriye doğru uyumlu olup olmadığını merak ediyordum. ArcMap 10 eklentimi C # 2.0 olarak değiştirmeli miyim, böylece ArcMap 9 ile çok sayıda kod düzenlemesi yapmadan yeniden derlenebilir mi? C # 3.0 ArcMap 9 ile çalışır mı?
Mike Rogers

Yanıtlar:


13

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 returnve yield breakCIL'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.DynamicYalnı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ı.


1
@SeaJunk, bu tam olarak doğru değil. ArcGIS 9.3 / VS2010 için ESRI SDK uzantısı olmasa bile, bu ArcGIS derlemelerine başvurmanızı engellemez ve kod yazmaya başlamaz. Yani, bu IDE'yi kullanmak hala mümkündür, sadece daha rahatsız edici. Ayrıca daha fazla manuel çalışma da olabilir (bileşenlerin kaydedilmesi vb.), Ancak yine de uygulanabilir AFAIK.
stakx

Evet, üzgünüm, yukarı baktım :)
SeaJunk

İyi bir açıklama yaptınız, ancak üçünün de (CLR, BCL ve C #) özellikleri birbirlerinden büyük ölçüde etkilendiği için ilişkiler biraz daha karmaşık.
Petr Krebs

Bir yan not olarak, CLR ve C #'ın evrimi hakkında çok az ilginç eğlenceli gerçek vardır. Örneğin, genel tip parametreleri üzerindeki kovaryans ve karşıtlık CLR 2.0'da tanıtıldı, ancak dil tarafından desteklenmeye başladığında C # 4'e kadar değildi. Bir diğeri, tesadüfen mükemmel bir örnek: C # 3'te tanıtılan LINQ, System.Runtime.CompilerServices.ExtensionAttribute kullanılarak C # 2'de simüle edilebilen genişletme yöntemlerine dayanır.
Petr Krebs

1
Eric Lippert'in blogu ( blogs.msdn.com/b/ericlippert ), .NET / C # 'ın çeşitli karanlık köşelerinde harika bir kaynak ve tasarımlarının ardındaki kararlar.
Petr Krebs

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.