Jawaban Sparkie mengerti, biarkan aku sedikit melengkapi.
".NET adalah lintas platform" terlalu banyak pernyataan yang ambigu karena kerangka kerja dan dunia yang semula diciptakan untuknya telah berubah dan berevolusi.
Jawaban singkatnya adalah:
Mesin yang mendasari bahwa kekuatan NET dan turunannya, Bahasa Infrastruktur Standar Umum, adalah cross-platform dan seolah-olah Anda ingin membuat kode Anda pergi ke beberapa platform, Anda perlu berencana untuk menggunakan API kanan pada platform yang tepat untuk memberikan pengalaman terbaik di setiap platform.
Keluarga CLI belum mencoba pendekatan "Write Once, Run Anywhere", karena perbedaan dari ponsel ke mainframe terlalu besar. Alih-alih semesta API dan fitur runtime yang khusus untuk platform telah muncul untuk memberi pengembang alat yang tepat untuk menciptakan pengalaman hebat di setiap platform.
Pikirkan: pemrogram tidak lagi menargetkan PC Windows atau Server Unix. Dunia, sekarang lebih dari sebelumnya dikelilingi oleh platform yang menarik dari PC, ke konsol game, ke ponsel yang kuat, ke kotak set-top, ke server besar dan mendistribusikan cluster mesin. Satu ukuran cocok untuk semua platform hanya akan merasa kembung pada perangkat kecil, dan merasa kurang bertenaga pada sistem besar .
Produk .NET Framework Microsoft tidak lintas platform, hanya berjalan di Windows. Ada variasi .NET Framework dari Microsoft yang berjalan di sistem lain seperti Windows Phone 7, XBox360 dan browser melalui Silverlight, tetapi semuanya adalah profil yang sedikit berbeda.
Hari ini Anda dapat menargetkan setiap OS utama, telepon, perangkat seluler, sistem dan server tertanam dengan teknologi .NET. Berikut adalah daftar yang menunjukkan implementasi CLI mana yang akan Anda gunakan dalam setiap kasus (daftar ini tidak komprehensif, tetapi harus mencakup 99% dari kasus):
- komputer PC berbasis x86 dan x86-64:
- menjalankan Windows -> Biasanya Anda menjalankan .NET atau Silverlight tetapi Anda juga dapat menggunakan Mono lengkap di sini.
- menjalankan Linux, BSD atau Solaris -> Anda menjalankan Mono atau Silverlight penuh
- menjalankan MacOS X -> Anda menjalankan Mono atau Silverlight penuh
- menjalankan Android -> Anda menjalankan subset Mono / Android
- Komputer ARM:
- Menjalankan Windows Phone 7: Anda menjalankan Compact Framework 2010
- Menjalankan Windows 6.5 dan yang lebih lama: Anda menjalankan Compact Framework lama
- Perangkat Android: Anda menjalankan Mono / Android
- Komputer PowerPC:
- Anda menjalankan Mono penuh untuk sistem operasi Linux, BSD atau Unix penuh
- Anda menjalankan embedded Mono untuk PS3, Wii atau sistem embedded lainnya.
- Di XBox360, Anda menjalankan CompactFramework
- Komputer S390, S390x, Itanium, SPARC:
- Anda menjalankan Mono penuh
- Sistem operasi tertanam lainnya:
- Anda menjalankan .NET MicroFramework atau Mono dengan profil seluler.
Tergantung pada kebutuhan Anda di atas mungkin cukup atau tidak. Anda tidak akan mendapatkan kode sumber yang sama untuk dijalankan di mana-mana. Misalnya, kode XNA tidak akan berjalan di setiap desktop, sedangkan perangkat lunak .NET Desktop tidak akan berjalan di XNA atau telepon. Anda biasanya perlu membuat perubahan pada kode Anda untuk berjalan di profil lain dari .NET Framework. Berikut adalah beberapa profil yang saya ketahui:
- Profil .NET 4.0
- Profil Silverlight
- Profil Windows Phone 7
- Profil XBox360
- Profil inti Mono - mengikuti profil .NET dan tersedia di Linux, MacOS X, Solaris, Windows dan BSD.
- .NET Micro Framework
- Mono di profil iPhone
- Mono di Profil Android
- Mono di Profil PS3
- Mono di Profil Wii
- Profil Cahaya Bulan (kompatibel dengan Silverlight)
- Moonlight extended profile (Silverlight + akses penuh .NET 4 API)
Jadi masing-masing profil itu sebenarnya sedikit berbeda, dan ini bukan hal yang buruk. Setiap profil dirancang agar sesuai dengan platform inangnya dan mengekspos API yang masuk akal, dan menghapus yang tidak masuk akal.
Misalnya, API Silverlight untuk mengontrol browser host tidak masuk akal di telepon. Dan shader di XNA tidak masuk akal pada perangkat keras PC yang tidak memiliki dukungan setara untuk itu.
Semakin cepat Anda menyadari bahwa .NET bukan solusi untuk mengisolasi pengembang dari kemampuan yang mendasari perangkat keras dan platform asli, semakin baik Anda.
Itu mulai berkata, beberapa API dan tumpukan tersedia dalam beberapa platform, misalnya ASP.NET dapat digunakan pada Windows, Linux, pada Solaris, pada MacOS X karena API tersebut ada di .NET dan Mono. ASP.NET tidak tersedia pada beberapa platform yang didukung Microsoft seperti XBox atau Windows Phone 7 dan tidak didukung pada platform lain yang Mono dukung seperti Wii atau iPhone.
Informasi berikut ini hanya benar pada 21 November, dan banyak hal di dunia Mono kemungkinan akan berubah.
Prinsip yang sama dapat diterapkan pada tumpukan lain, daftar lengkap akan membutuhkan tabel yang tepat, yang saya tidak tahu bagaimana menyajikan di sini, tetapi di sini adalah daftar teknologi yang mungkin tidak ada pada platform tertentu. Anda dapat menganggap bahwa apa pun yang tidak tercantum di sini tersedia (jangan ragu untuk mengirim saya suntingan untuk hal-hal yang saya lewatkan):
Core Runtime Engine [di mana-mana]
- Reflection.Emit Support [di mana-mana, kecuali WP7, CF, Xbox, MonoTouch, PS3]
- Dukungan SIMD CPU [Linux, BSD, Solaris, MacOS X; Segera PS3, MonoTouch dan MonoDroid]
- Lanjutan - Mono.Tasklets [Linux, BSD, Solaris, MacOS, PS3, Wii]
- Assembly Unloading [Khusus Windows]
- Injeksi VM [Linux, BSD, MacOS X, Solaris]
- DLR [Windows, Linux, MacOS X, Solaris, MonoDroid]
- Generik [beberapa batasan pada PS3 dan iPhone].
Bahasa
- C # 4 [di mana-mana]
- C # Compiler sebagai Layanan (Linux, MacOS, Solaris, BSD, Android)
- IronRuby [di mana-mana, execpt WP7, CF, Xbox, MonoTouch, PS3]
- IronPython [di mana-mana, execpt WP7, CF, Xbox, MonoTouch, PS3]
- F # [di mana-mana, execpt WP7, CF, Xbox, MonoTouch, PS3]
Tumpukan Server
- ASP.NET [Windows, Linux, MacOS, BSD, Solaris]
- ADO.NET [di mana-mana]
- LINQ ke SQL [di mana-mana]
- Kerangka Entitas [di mana-mana]
- Core XML stack [di mana-mana]
- Serialisasi XML [di mana-mana, kecuali WP7, CF, Xbox)
- LINQ ke XML (di mana-mana)
- System.Json [Silverlight, Linux, MacOS, MonoTouch, MonoDroid]
- System.Messaging [Windows; di Linux, MacOS dan Solaris membutuhkan RabbitMQ]
- .NET 1 Layanan Perusahaan [Khusus Windows]
- WCF [lengkap tentang Windows; subset kecil di Silverlight, Solaris, MacOS, Linux, MonoTouch, MonoDroid]
- Windows Workflow [Khusus Windows]
- Identitas Cardspace [khusus Windows]
Tumpukan GUI
- Silverlight (Windows, Mac, Linux - dengan Moonlight)
- WPF (hanya Windows)
- Gtk # (Windows, Mac, Linux, BSD)
- Windows.Forms (Windows, Mac, Linux, BSD)
- MonoMac - Integrasi Mac Asli (hanya Mac)
- MonoTouch - Integrasi iPhone Asli (khusus iPhone / iPad)
- MonoDroid - Integrasi Android Asli (khusus Android)
- API Media Center - Hanya Windows
- Clutter (Windows dan Linux)
Perpustakaan Grafik
- GDI + (Windows, Linux, BSD, MacOS)
- Kuarsa (MacOS X, iPhone, iPad)
- Kairo (Windows, Linux, BSD, MacOS, iPhone, iPad, MacOS X, PS3, Wii)
Mono Libraries - Cross Platform, dapat digunakan dalam. NET tetapi membutuhkan pembangunan secara manual
- C # 4 Compiler sebagai Layanan
- Cecil - Manipulasi CIL, alur kerja, instrumentasi CIL, Linker
- Perpustakaan RelaxNG
- Mono.Data. * Penyedia basis data
- Full System.Xaml (untuk digunakan dalam pengaturan di mana .NET tidak menawarkan stack)
MonoTouch berarti Mono berjalan di iPhone; MonoDroid berarti Mono berjalan di Android; Port PS3 dan Wii hanya tersedia untuk pengembang yang memenuhi syarat Sony dan Nintendo.
Saya minta maaf karena kurangnya formalitas.