คำตอบของ Sparkie เข้าใจแล้วขอผมเติมเต็มหน่อย
". NET is cross platform" เป็นคำสั่งที่คลุมเครือมากเกินไปเนื่องจากทั้งเฟรมเวิร์กและโลกที่สร้างขึ้นมาเพื่อการเปลี่ยนแปลงและพัฒนา
คำตอบสั้น ๆ คือ:
เอนจิ้นพื้นฐานที่ใช้. NET และอนุพันธ์ของมันคือ Common Language Infrastructure Standard คือข้ามแพลตฟอร์มและหากคุณต้องการให้โค้ดของคุณไปหลายแพลตฟอร์มคุณต้องวางแผนในการใช้ API ที่เหมาะสมบนแพลตฟอร์มที่เหมาะสมในการส่งมอบ ประสบการณ์ที่ดีที่สุดในแต่ละแพลตฟอร์ม
ตระกูล CLI ไม่ได้ลองใช้วิธี "เขียนครั้งเดียวรันได้ทุกที่" เนื่องจากความแตกต่างจากโทรศัพท์ไปยังเมนเฟรมใหญ่เกินไป แทนที่จะเป็นเอกภพของ API และคุณสมบัติรันไทม์ที่เป็นแพลตฟอร์มเฉพาะได้เกิดขึ้นเพื่อให้นักพัฒนามีเครื่องมือที่เหมาะสมในการสร้างประสบการณ์ที่ยอดเยี่ยมในแต่ละแพลตฟอร์ม
ลองคิดดูสิ: โปรแกรมเมอร์ไม่ได้กำหนดเป้าหมายพีซี Windows หรือเซิร์ฟเวอร์ Unix อีกต่อไป โลกมากกว่าที่เคยถูกล้อมรอบด้วยแพลตฟอร์มที่น่าสนใจตั้งแต่พีซีไปจนถึงเกมคอนโซลโทรศัพท์ที่ทรงพลังกล่องรับสัญญาณไปจนถึงเซิร์ฟเวอร์ขนาดใหญ่และกลุ่มเครื่องที่กระจายตัว หนึ่งขนาดพอดีกับแพลตฟอร์มทั้งหมดเพียงจะรู้สึกป่องบนอุปกรณ์เล็ก ๆ และความรู้สึก underpowered บนระบบที่มีขนาดใหญ่
ผลิตภัณฑ์. NET Framework ของ Microsoft ไม่ได้ข้ามแพลตฟอร์ม แต่จะทำงานบน Windows เท่านั้น มี. NET Framework จาก Microsoft ที่ทำงานบนระบบอื่น ๆ เช่น Windows Phone 7, XBox360 และเบราว์เซอร์ผ่าน Silverlight แต่เป็นโปรไฟล์ที่แตกต่างกันเล็กน้อย
วันนี้คุณสามารถกำหนดเป้าหมายระบบปฏิบัติการหลัก, โทรศัพท์, อุปกรณ์พกพา, ระบบฝังตัวและเซิร์ฟเวอร์ด้วยเทคโนโลยีที่ใช้. NET นี่คือรายการที่แสดงการใช้งาน CLI ที่คุณจะใช้ในแต่ละกรณี (รายการนี้ไม่ครอบคลุม แต่ควรครอบคลุม 99% ของเคส):
- คอมพิวเตอร์พีซีที่ใช้ x86 และ x86-64:
- ใช้ Windows -> โดยปกติคุณเรียกใช้. NET หรือ Silverlight แต่คุณสามารถใช้โมโนแบบเต็มได้ที่นี่
- ใช้งาน Linux, BSD หรือ Solaris -> คุณรัน Mono หรือ Silverlight แบบเต็ม
- ใช้ MacOS X -> คุณเรียกใช้ Mono หรือ Silverlight เต็ม
- ใช้ Android -> คุณเรียกใช้เซ็ตย่อย Mono / Android
- คอมพิวเตอร์ ARM:
- ใช้ Windows Phone 7: คุณเรียกใช้ Compact Framework 2010
- ใช้ Windows 6.5 ขึ้นไป: คุณเรียกใช้ Compact Framework เก่า
- อุปกรณ์ Android: คุณเรียกใช้ Mono / Android
- คอมพิวเตอร์ PowerPC:
- คุณเรียกใช้ Mono แบบเต็มสำหรับระบบปฏิบัติการ Linux, BSD หรือ Unix
- คุณเรียกใช้ Mono สำหรับ PS3, Wii หรือระบบฝังตัวอื่น ๆ
- บน XBox360 คุณเรียกใช้ CompactFramework
- คอมพิวเตอร์ S390, S390x, Itanium, SPARC:
- ระบบปฏิบัติการฝังตัวอื่น ๆ :
- คุณเรียกใช้. NET MicroFramework หรือ Mono ด้วยโพรไฟล์มือถือ
ขึ้นอยู่กับความต้องการของคุณข้างต้นอาจเพียงพอหรือไม่ คุณแทบจะไม่ได้รับซอร์สโค้ดเดียวกันเพื่อเรียกใช้ทุกที่ ตัวอย่างเช่นรหัส XNA จะไม่ทำงานบนเดสก์ท็อปทุกเครื่องในขณะที่ซอฟต์แวร์. NET Desktop จะไม่ทำงานบน XNA หรือโทรศัพท์ โดยทั่วไปคุณจะต้องทำการเปลี่ยนแปลงรหัสเพื่อให้ทำงานในส่วนกำหนดค่าอื่น ๆ ของ. NET Framework นี่คือบางส่วนของโปรไฟล์ที่ฉันรู้:
- . NET 4.0 Profile
- โปรไฟล์ Silverlight
- โปรไฟล์ Windows Phone 7
- โปรไฟล์ XBox360
- โมโนคอร์โปรไฟล์ - ติดตามโปรไฟล์. NET และมีให้บริการบน Linux, MacOS X, Solaris, Windows และ BSD
- .NET Micro Framework
- Mono บนโปรไฟล์ iPhone
- Mono บนโปรไฟล์ Android
- Mono บน PS3 Profile
- Mono บนโปรไฟล์ Wii
- โปรไฟล์ Moonlight (เข้ากันได้กับ Silverlight)
- โปรไฟล์เสริม Moonlight (Silverlight + การเข้าถึง. NET 4 API แบบเต็ม)
ดังนั้นหนึ่งในโปรไฟล์เหล่านั้นแตกต่างกันเล็กน้อยจริง ๆ และนี่ไม่ใช่สิ่งเลวร้าย แต่ละโปรไฟล์ได้รับการออกแบบให้เหมาะสมกับแพลตฟอร์มโฮสต์และเปิดเผย API ที่สมเหตุสมผลและลบโปรไฟล์ที่ไม่สมเหตุสมผล
ตัวอย่างเช่น API ของ Silverlight เพื่อควบคุมเบราว์เซอร์โฮสต์ไม่สมเหตุสมผลกับโทรศัพท์ และ shaders ใน XNA ไม่สมเหตุสมผลกับฮาร์ดแวร์ของพีซีที่ขาดการสนับสนุนเทียบเท่า
ในไม่ช้าคุณก็จะพบว่า. NET ไม่ใช่วิธีการแยกนักพัฒนาออกจากความสามารถพื้นฐานของฮาร์ดแวร์และแพลตฟอร์มเนทีฟ
ที่กล่าวไว้เริ่มต้น API และสแต็กบางตัวมีอยู่ในหลายแพลตฟอร์มเช่น ASP.NET สามารถใช้บน Windows, Linux, บน Solaris, บน MacOS X เพราะ API เหล่านั้นมีอยู่ทั้งใน. NET และ Mono ASP.NET ไม่สามารถใช้งานได้บนแพลตฟอร์มที่รองรับของ Microsoft เช่น XBox หรือ Windows Phone 7 และไม่รองรับบนแพลตฟอร์มอื่นที่ Mono รองรับเช่น Wii หรือ iPhone
ข้อมูลต่อไปนี้ถูกต้องเฉพาะ ณ วันที่ 21 พฤศจิกายนและหลายสิ่งในโลกโมโนจะมีการเปลี่ยนแปลง
หลักการเดียวกันนี้สามารถนำไปใช้กับสแต็คอื่น ๆ ได้รายการทั้งหมดจะต้องมีตารางที่เหมาะสมซึ่งฉันไม่รู้ว่าจะนำเสนอที่นี่ได้อย่างไร แต่นี่คือรายการเทคโนโลยีที่อาจไม่ปรากฏบนแพลตฟอร์มใดแพลตฟอร์มหนึ่ง คุณสามารถสันนิษฐานได้ว่าไม่มีสิ่งใดในรายการที่นี่ (สามารถส่งการแก้ไขสำหรับสิ่งที่ฉันพลาดได้)
Core Runtime Engine [ทุกที่]
- Reflection รับการสนับสนุนทุกที่ยกเว้น WP7, CF, Xbox, MonoTouch, PS3
- รองรับ CPU SIMD [Linux, BSD, Solaris, MacOS X; เร็ว ๆ นี้ PS3, MonoTouch และ MonoDroid]
- Continuations - Mono.Tasklets [Linux, BSD, Solaris, MacOS, PS3, Wii]
- การชุมนุมไม่โหลด [Windows เท่านั้น]
- VM Injection [Linux, BSD, MacOS X, Solaris]
- DLR [Windows, Linux, MacOS X, Solaris, MonoDroid]
- Generics [ข้อ จำกัด บางอย่างเกี่ยวกับ PS3 และ iPhone]
ภาษา
- C # 4 [ทุกที่]
- คอมไพเลอร์ C # เป็นบริการ (Linux, MacOS, Solaris, BSD, Android)
- IronRuby [ทุกที่, รัน WP7, CF, Xbox, MonoTouch, PS3]
- IronPython [ทุกที่, รัน WP7, CF, Xbox, MonoTouch, PS3]
- F # [ทุกหนแห่ง, รัน WP7, CF, Xbox, MonoTouch, PS3]
กองเซิร์ฟเวอร์
- ASP.NET [Windows, Linux, MacOS, BSD, Solaris]
- ADO.NET [ทุกที่]
- LINQ ไปยัง SQL [ทุกที่]
- Entity Framework [ทุกที่]
- Core XML stack [ทุกที่]
- การจัดลำดับ XML [ทุกที่ยกเว้น WP7, CF, Xbox)
- LINQ เป็น XML (ทุกที่)
- System.Json [Silverlight, Linux, MacOS, MonoTouch, MonoDroid]
- System.Messaging [Windows; บน Linux, MacOS และ Solaris ต้องการ RabbitMQ]
- .NET 1 Enterprise Services [Windows เท่านั้น]
- WCF [สมบูรณ์บน Windows; เซตย่อยขนาดเล็กบน Silverlight, Solaris, MacOS, Linux, MonoTouch, MonoDroid]
- เวิร์กโฟลว์ของ Windows [Windows เท่านั้น]
- ข้อมูลเฉพาะของ Cardspace [Windows เท่านั้น]
กอง GUI
- Silverlight (Windows, Mac, Linux - พร้อม Moonlight)
- WPF (Windows เท่านั้น)
- Gtk # (Windows, Mac, Linux, BSD)
- Windows.Forms (Windows, Mac, Linux, BSD)
- MonoMac - Native Mac Integration (Mac เท่านั้น)
- MonoTouch - Native iPhone Integration (iPhone / iPad เท่านั้น)
- MonoDroid - การผสานรวมระหว่างระบบ Android (สำหรับ Android เท่านั้น)
- Media Center APIs - Windows เท่านั้น
- Clutter (Windows และ Linux)
ห้องสมุดกราฟิก
- GDI + (Windows, Linux, BSD, MacOS)
- ควอตซ์ (MacOS X, iPhone, iPad)
- ไคโร (Windows, Linux, BSD, MacOS, iPhone, iPad, MacOS X, PS3, Wii)
ไลบรารีโมโน - แพลตฟอร์มข้ามสามารถใช้ใน. NET แต่ต้องสร้างด้วยตนเอง
- คอมไพเลอร์ C # 4 เป็นบริการ
- เซซิล - การจัดการ CIL, ขั้นตอนการทำงาน, เครื่องมือวัดของ CIL, ตัวเชื่อมโยง
- ห้องสมุด RelaxNG
- Mono.Data. * ผู้ให้บริการฐานข้อมูล
- Full System.Xaml (สำหรับใช้ในการตั้งค่าโดยที่. NET ไม่มีสแต็ก)
MonoTouch หมายถึง Mono ทำงานบน iPhone MonoDroid หมายถึง Mono ทำงานบน Android; พอร์ต PS3 และ Wii พร้อมใช้งานสำหรับนักพัฒนาที่มีคุณสมบัติของ Sony และ Nintendo เท่านั้น
ฉันขอโทษสำหรับการขาดระเบียบ