Bisakah saya menggunakan C # 4.0 dengan kerangka kerja target diatur ke .NET 3.5 untuk mengembangkan ekstensi untuk ArcMap 9.3? Atau harus C # 3.0 atau lebih awal?
Bisakah saya menggunakan C # 4.0 dengan kerangka kerja target diatur ke .NET 3.5 untuk mengembangkan ekstensi untuk ArcMap 9.3? Atau harus C # 3.0 atau lebih awal?
Jawaban:
Jawaban singkat: Dalam pengalaman saya, seharusnya sama sekali tidak ada masalah mengembangkan kode .NET 3.5 berbasis untuk ArcGIS 9.3 di Visual Studio 2010 (dengan C # bahasa versi 4), selama Anda secara eksplisit menargetkan .NET Framework 3.5. Versi bahasa C # sebagian besar tidak relevan di sini.
PS: Jawaban ini tidak masuk ke perbedaan yang ada antara mengembangkan ekstensi ArcGIS untuk versi 9.3 dan 10. (ESRI telah membuat beberapa perubahan besar pada model add-in, tapi saya berasumsi Anda sadar akan hal itu. .)
Jawaban yang lebih panjang: Anda perlu membedakan antara versi bahasa C #, dan versi Kerangka yang ditargetkan.
Anda dapat menganggap .NET Framework terdiri dari dua bagian utama: CLR (Common Language Runtime), dan BCL (Base Class Library). Yang pertama adalah "mesin virtual", sedangkan yang terakhir adalah perpustakaan kelas (berisi semua jenis yang dapat Anda lihat di MSDN).
.NET Frameworks 2 hingga 3.5 semuanya menggunakan CLR yang sama (versi 2), yaitu lingkungan eksekusi belum benar-benar berkembang. Namun, yang berkembang adalah BCL. Jika Anda menjalankan aplikasi .NET 3.5 pada mesin .NET 2, masalah utama bukanlah "bytecode" (CIL) yang tidak kompatibel (tidak akan), tetapi aplikasi mungkin merujuk dan menggunakan tipe yang belum tersedia di .NET 2 BCL.
Sekarang, ketika Anda memberi tahu Visual Studio 2010 untuk menargetkan .NET Framework 3.5, itu akan memastikan bahwa Anda tidak akan menggunakan tipe BCL dari versi Framework yang lebih baru. Ini juga akan memastikan bahwa output kode oleh kompiler C # tidak akan memerlukan fitur yang hanya tersedia di versi CLR 4.
Versi bahasa C # sangat sedikit hubungannya dengan semua ini. Apa yang sebenarnya dilakukan oleh kompiler C # untuk mengambil kode sumber Anda dan menerjemahkannya ke bahasa pemrograman level jauh lebih rendah yang disebut CIL (Common Intermediate Language). Konstruk bahasa C # tertentu tidak lagi dapat dikenali di CIL: Misalnya, yield return
dan yield break
tidak ada di CIL. Mereka hanya diterjemahkan ke implementasi IEnumerator<T>
antarmuka.
Untuk meringkas ini: Versi bahasa C # menjadi tidak relevan segera setelah kode Anda dikompilasi. Apa yang penting adalah ...
apakah output CIL / "bytecode" kompatibel dengan .NET Framework yang ditargetkan (jika Anda menargetkan .NET 3.5, itu akan kompatibel bahkan dengan .NET 2 untuk alasan yang disebutkan di atas); dan
apakah kode Anda merujuk / menggunakan tipe yang tersedia dalam kerangka kerja target.
Satu pengecualian penting (dalam arti bahwa bahasa C # membangun memerlukan versi tertentu dari kerangka kerja; ini adalah yang terakhir kasus whwn generics diperkenalkan IIRC) mungkin kata kunci C # dynamic
. Mungkin dikompilasi ke kode yang memerlukan jenis dari System.Dynamic
namespace, yang hanya tersedia sejak. NET 4. Tapi jangan khawatir: Jika Anda telah mengatur proyek Visual Studio 2010 Anda untuk menargetkan. NET 3.5, Anda harus mendapatkan kesalahan kompiler jika Anda mencoba menggunakan hal-hal yang tidak tersedia, atau kompatibel dengan, versi .NET Framework tertentu.
Perlu diingat bahwa VS2010 bukan IDE yang didukung untuk pengembangan 9.3. Anda tidak akan mendapatkan referensi perakitan, bantuan atau integrasi templat.
Anda bisa membuatnya bekerja: http://forums.arcgis.com/threads/29935-VS2010-with-version-9.3.1