Odpowiedź Sparkiego to zrozumiała , pozwólcie, że trochę uzupełnię.
„.NET jest wieloplatformowy” to zbyt wieloznaczne stwierdzenie, ponieważ zarówno środowisko, jak i świat, dla którego został stworzony, zmieniły się i ewoluowały.
Krótka odpowiedź brzmi:
Podstawowy silnik, który zasila platformę .NET i jej pochodne, Common Language Infrastructure Standard, jest wieloplatformowy i jeśli chcesz, aby Twój kod trafiał na wiele platform, musisz zaplanować użycie odpowiednich interfejsów API na właściwej platformie, aby dostarczyć najlepsze wrażenia na każdej platformie.
Rodzina CLI nie wypróbowała metody „Napisz raz, uruchom gdziekolwiek”, ponieważ różnice między telefonem a komputerem mainframe są zbyt duże. Zamiast tego powstał wszechstronny interfejs API i funkcje wykonawcze, które są specyficzne dla platformy, aby dać programistom odpowiednie narzędzia do tworzenia doskonałych doświadczeń na każdej platformie.
Pomyśl o tym: programiści nie atakują już komputerów z systemem Windows ani serwerów Unix. Świat, bardziej niż kiedykolwiek, otoczony jest fascynującymi platformami od komputerów osobistych, konsol do gier, potężnych telefonów, dekoderów, dużych serwerów i rozproszonych klastrów maszyn. Jeden rozmiar pasujący do wszystkich platform po prostu czułby się rozdęty na małych urządzeniach, a na dużych systemach czułby się słabo .
Produkt Microsoft .NET Framework nie jest wieloplatformowy, działa tylko w systemie Windows. Istnieją odmiany Microsoft .NET Framework firmy Microsoft, które działają na innych systemach, takich jak Windows Phone 7, XBox360 i przeglądarki za pośrednictwem Silverlight, ale wszystkie są nieco innymi profilami.
Dziś możesz kierować reklamy do wszystkich głównych systemów operacyjnych, telefonów, urządzeń mobilnych, systemów wbudowanych i serwerów za pomocą technologii opartych na .NET. Oto lista, która pokazuje implementację interfejsu CLI w każdym przypadku (ta lista nie jest wyczerpująca, ale powinna obejmować 99% przypadków):
- Komputery PC z procesorami x86 i x86-64:
- z systemem Windows -> Zazwyczaj używasz platformy .NET lub Silverlight, ale możesz także użyć pełnego Mono tutaj.
- z systemem Linux, BSD lub Solaris -> Uruchamiasz pełne Mono lub Silverlight
- z systemem MacOS X -> Uruchamiasz pełne Mono lub Silverlight
- z systemem Android -> Uruchamiasz podzbiór Mono / Android
- Komputery ARM:
- Z systemem Windows Phone 7: używasz Compact Framework 2010
- W systemie Windows 6.5 i starszych: korzystasz ze starego Compact Framework
- Urządzenia z Androidem: korzystasz z Mono / Android
- Komputery PowerPC:
- Uruchamiasz pełne Mono dla systemów operacyjnych Linux, BSD lub Unix
- Używasz wbudowanego Mono dla PS3, Wii lub innych systemów wbudowanych.
- Na XBox360 uruchamiasz CompactFramework
- Komputery S390, S390x, Itanium, SPARC:
- Inne wbudowane systemy operacyjne:
- Korzystasz z .NET MicroFramework lub Mono z profilem mobilnym.
W zależności od potrzeb powyższe może być wystarczające lub nie. Prawie nie dostaniesz tego samego kodu źródłowego do uruchomienia wszędzie. Na przykład kod XNA nie będzie działał na każdym pulpicie, podczas gdy oprogramowanie .NET Desktop nie będzie działać na XNA lub telefonie. Zwykle musisz wprowadzić zmiany w kodzie, aby działały w innych profilach .NET Framework. Oto niektóre profile, które znam:
- Profil .NET 4.0
- Profil Silverlight
- Profil Windows Phone 7
- Profil XBox360
- Mono core Profile - podąża za profilem .NET i jest dostępny w systemach Linux, MacOS X, Solaris, Windows i BSD.
- .NET Micro Framework
- Profil mono na iPhonie
- Mono na profilu Androida
- Mono na profilu PS3
- Mono na profilu Wii
- Profil księżycowy (zgodny z Silverlight)
- Rozszerzony profil Moonlight (Silverlight + pełny dostęp do API .NET 4)
Tak więc każdy z tych profili jest nieco inny i nie jest to zła rzecz. Każdy profil został zaprojektowany w taki sposób, aby pasował do platformy hosta i udostępniał interfejsy API, które mają sens, i usuwa te, które nie mają sensu.
Na przykład interfejsy API Silverlight do sterowania przeglądarką hosta nie mają sensu w telefonie. A moduły cieniujące w XNA nie mają sensu na sprzęcie komputerowym, który nie ma takiej obsługi.
Im szybciej zdasz sobie sprawę, że .NET nie jest rozwiązaniem do izolowania programisty od podstawowych możliwości sprzętu i platformy natywnej, tym lepiej.
Na początku powiedziano, że niektóre interfejsy API i stosy są dostępne na wielu platformach, na przykład ASP.NET może być używany w systemach Windows, Linux, Solaris i MacOS X, ponieważ te interfejsy API istnieją zarówno w .NET, jak i Mono. ASP.NET nie jest dostępny na niektórych obsługiwanych platformach Microsoft, takich jak XBox lub Windows Phone 7 i nie jest obsługiwany na innych platformach obsługiwanych przez Mono, takich jak Wii lub iPhone.
Poniższe informacje są prawidłowe dopiero od 21 listopada i wiele rzeczy w świecie Mono prawdopodobnie się zmieni.
Te same zasady można zastosować do innych stosów, pełna lista wymagałaby odpowiedniej tabeli, której nie mam pojęcia, jak tu przedstawić, ale tutaj jest lista technologii, które mogą nie występować na konkretnej platformie. Możesz założyć, że wszystko, czego nie ma tutaj na liście, jest dostępne (możesz przesłać mi zmiany dotyczące rzeczy, które przegapiłem):
Core Runtime Engine [wszędzie]
- Reflection.Emit Wsparcie [wszędzie oprócz WP7, CF, Xbox, MonoTouch, PS3]
- Obsługa CPU SIMD [Linux, BSD, Solaris, MacOS X; Wkrótce PS3, MonoTouch i MonoDroid]
- Kontynuacje - Mono.Tasklets [Linux, BSD, Solaris, MacOS, PS3, Wii]
- Rozładowywanie zestawu [tylko Windows]
- VM Injection [Linux, BSD, MacOS X, Solaris]
- DLR [Windows, Linux, MacOS X, Solaris, MonoDroid]
- Generics [niektóre ograniczenia na PS3 i iPhone'a].
Języki
- C # 4 [wszędzie]
- Kompilator C # jako usługa (Linux, MacOS, Solaris, BSD, Android)
- IronRuby [wszędzie, uruchom WP7, CF, Xbox, MonoTouch, PS3]
- IronPython [wszędzie, wykonaj WP7, CF, Xbox, MonoTouch, PS3]
- F # [wszędzie, wykonaj WP7, CF, Xbox, MonoTouch, PS3]
Stosy serwerów
- ASP.NET [Windows, Linux, MacOS, BSD, Solaris]
- ADO.NET [wszędzie]
- LINQ do SQL [wszędzie]
- Entity Framework [wszędzie]
- Podstawowy stos XML [wszędzie]
- Serializacja XML [wszędzie, z wyjątkiem WP7, CF, Xbox]
- LINQ to XML (wszędzie)
- System.Json [Silverlight, Linux, MacOS, MonoTouch, MonoDroid]
- System.Messaging [Windows; w systemach Linux, MacOS i Solaris wymaga RabbitMQ]
- .NET 1 Enterprise Services [tylko Windows]
- WCF [kompletny w systemie Windows; mały podzbiór w Silverlight, Solaris, MacOS, Linux, MonoTouch, MonoDroid]
- Windows Workflow [tylko Windows]
- Tożsamość Cardspace [tylko Windows]
Stosy GUI
- Silverlight (Windows, Mac, Linux - z Moonlight)
- WPF (tylko Windows)
- Gtk # (Windows, Mac, Linux, BSD)
- Windows.Forms (Windows, Mac, Linux, BSD)
- MonoMac - Native Mac Integration (tylko Mac)
- MonoTouch - natywna integracja iPhone'a (tylko iPhone / iPad)
- MonoDroid - natywna integracja z Androidem (tylko Android)
- Interfejsy API Media Center - tylko Windows
- Clutter (Windows i Linux)
Biblioteki graficzne
- GDI + (Windows, Linux, BSD, MacOS)
- Kwarcowy (MacOS X, iPhone, iPad)
- Kair (Windows, Linux, BSD, MacOS, iPhone, iPad, MacOS X, PS3, Wii)
Mono Libraries - Cross Platform, mogą być używane w .NET, ale wymagają ręcznego budowania
- Kompilator C # 4 jako usługa
- Cecil - CIL Manipulation, workflow, instrumentation of CIL, Linkers
- Biblioteki RelaxNG
- Dostawcy baz danych Mono.Data. *
- Pełny System.Xaml (do użytku w konfiguracjach, w których .NET nie oferuje stosu)
MonoTouch oznacza Mono działające na iPhonie; MonoDroid oznacza Mono działające na Androidzie; Porty PS3 i Wii są dostępne tylko dla programistów Sony i Nintendo.
Przepraszam za brak formalności.