Sparkie'nin cevabı anladım, biraz tamamlayayım.
".NET, platformlar arasıdır", hem çerçeve hem de başlangıçta yaratıldığı dünya değiştiği ve geliştiği için çok belirsiz bir ifadedir.
Kısa cevap:
.NET ve türevlerine, Ortak Dil Altyapısı Standardı'na güç veren temel motor çapraz platformdur ve kodunuzu birden fazla platforma yönlendirmek istiyorsanız, doğru API'leri doğru platformda sunmayı planlamanız gerekir. Her platformda en iyi deneyim.
CLI ailesi "Bir Kez Yaz, Herhangi Bir Yere Çalıştır" yaklaşımını denememiştir, çünkü bir telefondan ana bilgisayara olan farklar çok büyüktür. Bunun yerine, geliştiricilere her platformda harika deneyimler oluşturmak için doğru araçları sağlamak için platforma özgü bir API ve çalışma zamanı özellikleri evreni ortaya çıkmıştır .
Bir düşünün: programcılar artık Windows PC'leri veya Unix Sunucularını hedef almıyor. Dünya şimdi her zamankinden daha fazla bilgisayarlardan, oyun konsollarına, güçlü telefonlara, set üstü kutulara, büyük sunuculara ve dağıtılmış makine kümelerine kadar büyüleyici platformlarla çevrilidir. Tüm platformlara uyan tek beden, yalnızca küçük cihazlarda şişkin hisseder ve büyük sistemlerde güçsüz hisseder .
Microsoft'un .NET Framework ürünü çapraz platform değildir, yalnızca Windows'ta çalışır. .NET Framework'ün Microsoft'tan Windows Phone 7, XBox360 ve Silverlight aracılığıyla tarayıcılar gibi diğer sistemlerde çalışan varyasyonları var, ancak hepsi biraz farklı profiller.
Bugün her büyük ana işletim sistemi, telefon, mobil cihaz, gömülü sistem ve sunucuyu .NET tabanlı teknolojilerle hedefleyebilirsiniz. Her durumda hangi CLI uygulamasını kullanacağınızı gösteren bir liste (bu liste kapsamlı değildir, ancak vakaların% 99'unu kapsamalıdır):
- x86 ve x86-64 tabanlı PC bilgisayarları:
- Windows çalıştırma -> Genelde .NET veya Silverlight kullanıyorsunuz ancak burada tam Mono'yu da kullanabilirsiniz.
- Linux, BSD veya Solaris kullanıyorsanız -> Tam Mono veya Silverlight kullanıyorsunuz
- MacOS X kullanıyorsanız -> Tam Mono veya Silverlight kullanıyorsunuz
- Android -> Mono / Android altkümesini çalıştırıyorsun
- ARM bilgisayarlar:
- Windows Phone 7’yi Çalıştırmak: Compact Framework 2010’u çalıştırıyorsunuz
- Windows 6.5 ve daha eski sürümleri çalıştırıyorsanız: eski Compact Framework'ü çalıştırıyorsunuz
- Android cihazlar: Mono / Android kullanıyorsunuz
- PowerPC bilgisayarlar:
- Tam Linux, BSD veya Unix işletim sistemleri için Mono kullanıyorsunuz
- PS3, Wii veya diğer gömülü sistemler için gömülü Mono çalıştırıyorsunuz.
- XBox360'da CompactFramework'u çalıştırıyorsunuz
- S390, S390x, Itanium, SPARC bilgisayarlar:
- Diğer gömülü işletim sistemleri:
- Mobil profilde .NET MicroFramework veya Mono kullanıyorsunuz.
İhtiyaçlarınıza bağlı olarak yukarıdakiler yeterli olabilir veya olmayabilir. Her yerde çalıştırmak için aynı kaynak kodunu pek elde edemezsiniz. Örneğin, XNA kodu her masaüstünde çalışmaz, .NET Desktop yazılımı ise XNA veya telefonda çalışmaz. Genellikle .NET Framework'ün diğer profillerinde çalıştırmak için kodunuzda değişiklik yapmanız gerekir. İşte bildiğim profillerden bazıları:
- .NET 4.0 Profili
- Silverlight Profili
- Windows Phone 7 Profili
- XBox360 Profili
- Mono çekirdek Profili - .NET profilini takip eder ve Linux, MacOS X, Solaris, Windows ve BSD'de kullanılabilir.
- .NET Micro Framework
- İPhone profilinde Mono
- Android Profilindeki Mono
- PS3'deki Mono Profili
- Wii Profilindeki Mono
- Mehtap profili (Silverlight ile uyumlu)
- Mehtap genişletilmiş profil (Silverlight + tam .NET 4 API erişimi)
Yani bu profillerin her biri aslında biraz farklı ve bu kötü bir şey değil. Her profil kendi ana platformuna uyacak ve mantıklı olan API'leri gösterecek ve mantıklı olmayanları kaldıracak şekilde tasarlanmıştır.
Örneğin, Silverlight'ın ana bilgisayar tarayıcısını denetleme API'leri telefonda bir anlam ifade etmiyor. Ve XNA'daki gölgelendiriciler, eşdeğer desteği olmayan PC donanımı hakkında hiçbir şey ifade etmiyor.
.NET'in geliştiriciyi donanımın ve yerel platformun temel özelliklerinden izole etmenin bir çözümü olmadığını ne kadar erken fark ederseniz, o kadar iyi olursunuz.
Başlangıcında, bazı API'ler ve yığınlar birden fazla platformda mevcuttur, örneğin ASP.NET, Windows'ta, Linux'ta, Solaris'te MacOS X'de kullanılabilir çünkü bu API'ler hem .NET hem de Mono'da mevcuttur. ASP.NET, Microsoft'un XBox veya Windows Phone 7 gibi desteklenen platformlarında bulunmaz ve Mono'nun Wii veya iPhone gibi desteklediği diğer platformlarda desteklenmez.
Aşağıdaki bilgiler sadece 21 Kasım itibariyle doğrudur ve Mono dünyasında birçok şey muhtemelen değişecektir.
Aynı ilkeler diğer yığınlara da uygulanabilir, tam bir liste burada nasıl sunulacağı hakkında hiçbir fikrim olmayan uygun bir tabloya ihtiyaç duyar, ancak burada belirli bir platformda bulunmayabilecek teknolojilerin bir listesi vardır. Burada listelenmeyen bir şey olduğunu varsayabilirsin (kaçırdığım şeyler için bana düzenlemeler göndermekten çekinmeyin):
Core Runtime Engine [her yerde]
- Reflection.Emit Desteği [WP7, CF, Xbox, MonoTouch, PS3 hariç her yerde]
- CPU SIMD desteği [Linux, BSD, Solaris, MacOS X; Yakında PS3, MonoTouch ve MonoDroid]
- Devam Ediyor - Mono.Tasklets [Linux, BSD, Solaris, MacOS, PS3, Wii]
- Montaj Boşaltma [Sadece Windows]
- VM Enjeksiyonu [Linux, BSD, MacOS X, Solaris]
- DLR [Windows, Linux, MacOS X, Solaris, MonoDroid]
- Jenerikler [PS3 ve iPhone'da bazı sınırlamalar].
Diller
- C # 4 [her yerde]
- C # Bir Hizmet Olarak Derleyici (Linux, MacOS, Solaris, BSD, Android)
- IronRuby [her yerde, WP7, CF, Xbox, MonoTouch, PS3 uygulama]
- IronPython [her yerde, WP7, CF, Xbox, MonoTouch, PS3 uygulama]
- F # [her yerde, WP7, CF, Xbox, MonoTouch, PS3 uygulayın]
Sunucu Yığınları
- ASP.NET [Windows, Linux, MacOS, BSD, Solaris]
- ADO.NET [her yerde]
- LINQ to SQL [her yerde]
- Varlık Çerçevesi [her yerde]
- Çekirdek XML yığını [her yerde]
- XML serileştirme [WP7, CF, Xbox hariç her yer)
- LINQ to XML (her yerde)
- System.Json [Silverlight, Linux, MacOS, MonoTouch, MonoDroid]
- System.Messaging [Windows; Linux'ta MacOS ve Solaris RabbitMQ gerektirir]
- .NET 1 Kurumsal Hizmetler [Yalnızca Windows]
- WCF [Windows'ta tamamlandı; Silverlight, Solaris, MacOS, Linux, MonoTouch, MonoDroid üzerinde küçük alt kümeler]
- Windows İş Akışı [Sadece Windows]
- Kart alanı kimliği [Yalnızca Windows]
GUI yığınları
- Silverlight (Windows, Mac, Linux - Ay Işığı ile)
- WPF (yalnızca Windows)
- Gtk # (Windows, Mac, Linux, BSD)
- Windows.Forms (Windows, Mac, Linux, BSD)
- MonoMac - Yerel Mac Entegrasyonu (yalnızca Mac)
- MonoTouch - Yerel iPhone Entegrasyonu (yalnızca iPhone / iPad)
- MonoDroid - Yerel Android Entegrasyonu (Sadece Android)
- Media Center API'leri - yalnızca Windows
- Dağınıklığı (Windows ve Linux)
Grafik Kütüphaneleri
- GDI + (Windows, Linux, BSD, MacOS)
- Kuvars (MacOS X, iPhone, iPad)
- Kahire (Windows, Linux, BSD, MacOS, iPhone, iPad, MacOS, PS3, Wii)
Mono Kütüphaneleri - Çapraz Platform, .NET'te kullanılabilir ancak manuel olarak oluşturulmasını gerektirir
- C # 4 Hizmet Olarak Derleyici
- Cecil - CIL Manipülasyonu, iş akışı, CIL enstrümantasyonu, Bağlayıcılar
- RelaxNG kütüphaneleri
- Mono.Data. * Veritabanı sağlayıcıları
- Tam System.Xaml (.NET'in yığın sağlamadığı kurulumlarda kullanım için)
MonoTouch iPhone'da çalışan Mono anlamına gelir; MonoDroid Android'de çalışan Mono anlamına gelir; PS3 ve Wii portları yalnızca Sony ve Nintendo yetkili geliştiricileri tarafından kullanılabilir.
Formalitenin olmayışı için özür dilerim.