Necromancing
ให้คำตอบที่แท้จริง
อะไรคือความแตกต่างระหว่าง. Net Core และ Mono
. NET Core ในขณะนี้อย่างเป็นทางการคืออนาคตของ. NET ส่วนใหญ่เริ่มต้นด้วยการเขียนเฟรมเวิร์กASP.NETและแอปพลิเคชันคอนโซลอีกครั้งซึ่งแน่นอนว่ารวมถึงแอปพลิเคชันเซิร์ฟเวอร์ด้วย (เนื่องจากเป็นทัวริงที่สมบูรณ์และรองรับการทำงานร่วมกันกับ C dll คุณสามารถทำได้ถ้าคุณต้องการเขียนแอปพลิเคชันเดสก์ท็อปของคุณด้วยเช่นผ่านห้องสมุดของบุคคลที่สามเช่นAvaloniaซึ่งค่อนข้างพื้นฐานในเวลาที่ฉันเขียนสิ่งนี้ครั้งแรกซึ่งหมายความว่าคุณค่อนข้าง จำกัด เนื้อหาเว็บหรือเซิร์ฟเวอร์) เมื่อเวลาผ่านไปมีการเพิ่ม API จำนวนมากใน. NET Core ดังนั้นหลังจากรุ่น 3.1 .NET Core จะข้ามไปเป็นเวอร์ชัน 5.0 เรียกว่า. NET 5.0 โดยไม่มี "Core" และจากนั้นจะเป็นอนาคตของ. NET Framework สิ่งที่เคยเป็น. NET Framework แบบเต็มจะอวดอ้างในโหมดการบำรุงรักษาแบบเต็ม. NET Framework 4.8.x ไม่กี่ทศวรรษจนกว่ามันจะตาย (อาจจะยังคงมีการอัพเกรดบางอย่าง แต่ฉันสงสัย) ในคำอื่น ๆ .NET หลักคืออนาคตของ .NET และเต็ม .NET Framework จะไปทางของนกโดโด
จุดหลักของ. NET Core นอกเหนือจากการรองรับหลายแพลตฟอร์มคือการปรับปรุงประสิทธิภาพและเพื่อเปิดใช้งาน "native compilation" / การปรับใช้ในตัวเอง (ดังนั้นคุณไม่จำเป็นต้องติดตั้ง. NET Framework / VM บนเครื่องเป้าหมาย .
ในมือข้างหนึ่งที่นี้หมายถึง docker.io สนับสนุนในลินุกซ์และอื่น ๆ การใช้งานอยู่ในตัวเองจะเป็นประโยชน์ใน "คอมพิวเตอร์เมฆ" ตั้งแต่นั้นมาคุณก็สามารถใช้สิ่งที่รุ่นของกรอบ dotnet-core ที่คุณต้องการ และคุณไม่ต้องกังวลกับเวอร์ชันของ sysadmin ใด ๆ ที่ติดตั้งเฟรมเวิร์ก. NET
ในขณะที่รันไทม์. NET Core รองรับระบบปฏิบัติการและโปรเซสเซอร์หลายตัว SDK เป็นเรื่องราวที่แตกต่าง และในขณะที่ SDK รองรับระบบปฏิบัติการหลายระบบการสนับสนุน ARM สำหรับ SDK คือ / ยังคงทำงานอยู่ .NET Core รองรับโดย Microsoft Dotnet-Core ไม่ได้มาพร้อมกับ WinForms หรือ WPF หรืออะไรทำนองนั้น
- ในฐานะของเวอร์ชัน 3.0, WinForms และ WPF ยังรองรับโดย. NET Core แต่เฉพาะใน Windows และเฉพาะ C # ไม่ใช่โดย VB.NET (รองรับ VB.NET ที่วางแผนไว้สำหรับ v5 ในปี 2020) และไม่มีตัวออกแบบฟอร์มใน. NET Core: จะมีการจัดส่งพร้อมกับการปรับปรุง Visual Studio ในภายหลังในเวลาที่ไม่ระบุ
- WebForms ยังคงไม่รองรับโดย. NET Core และไม่มีแผนรองรับพวกเขาเลยทีเดียว ( Blazorเป็นเด็กใหม่ในเมืองสำหรับเรื่องนี้)
- .NET Core ยังมาพร้อมกับ System.Runtime ซึ่งแทนที่ mscorelib
- บ่อยครั้งที่. NET Core จะถูกรวมเข้ากับNetStandardซึ่งเป็นตัวห่อหุ้มรอบ ๆ System.Runtime / mscorelib (และอื่น ๆ ) ที่ช่วยให้คุณเขียนไลบรารีที่มีเป้าหมาย. NET Core,. NET Framework แบบเต็มและ Xamarin (iOS) / Android) ทั้งหมดพร้อมกัน
- .NET Core SDK ไม่ได้ / ไม่ทำงานบน ARM อย่างน้อยก็ไม่ได้ล่าสุดที่ฉันตรวจสอบ
" โครงการโมโน "นั้นเก่ากว่า. NET Core มาก
โมโนเป็นภาษาสเปนและมีความหมายว่าลิงและเป็นชื่อที่ไม่มีส่วนเกี่ยวข้องกับ mononucleosis (คำใบ้: คุณสามารถรับรายชื่อพนักงานภายใต้http://primates.ximian.com /)
Mono เริ่มต้นในปี 2005 โดยMiguel de Icaza (คนที่เริ่มGNOME - และอื่น ๆ อีกสองสามคน) เป็นการใช้งาน. NET Framework for Linux (Ximian / SuSe / Novell) Mono รวมถึงเว็บฟอร์ม Winforms, MVC, Olive และ IDE ที่เรียกว่าMonoDevelop(หรือที่รู้จักในชื่อ Xamarin Studio หรือ Visual Studio Mac) โดยทั่วไปเทียบเท่ากับ (OpenJDK) JVM และ (OpenJDK) JDK / JRE (ตรงข้ามกับ SUN / Oracle JDK) คุณสามารถใช้มันเพื่อรับแอปพลิเคชัน ASP.NET-WebForms + WinForms + ASP.NET-MVC เพื่อทำงานบน Linux
โมโนได้รับการสนับสนุนโดย Xamarin (ชื่อ บริษัท ใหม่ของสิ่งที่เคยเป็น Ximian เมื่อพวกเขามุ่งเน้นไปที่ตลาดมือถือแทนที่จะเป็นตลาด Linux) และไม่ใช่โดย Microsoft
(เนื่องจาก Xamarin ถูกซื้อโดย Microsoft นั่นเป็นเทคนิค (แต่ไม่ใช่ทางวัฒนธรรม) Microsoft)
โดยทั่วไปคุณจะได้รับข้อมูล C # ของคุณเพื่อคอมไพล์ในโมโน แต่ไม่ใช่ VB.NET
Mono คิดถึงคุณสมบัติขั้นสูงบางอย่างเช่น WSE / WCF และ WebParts
การใช้งานโมโนหลายอย่างไม่สมบูรณ์ (เช่นการโยน NotImplementedException ในการเข้ารหัส ECDSA), buggy (เช่น ODBC / ADO.NET ด้วย Firebird) ทำงานแตกต่างจากใน NET (ตัวอย่างเช่น XML-serialization) หรือไม่เสถียร (ASP.NET MVC) และช้าจนไม่อาจยอมรับได้ (Regex) กลับหัวกลับหาง, toolchain โมโนยังทำงานบน ARM
ตราบใดที่. NET Core เป็นห่วงเมื่อพวกเขาพูดข้ามแพลตฟอร์มอย่าคาดหวังว่าข้ามแพลตฟอร์มหมายความว่าคุณสามารถทำได้เพียงติดตั้ง. NET Core บน ARM-Linux อย่างที่คุณทำได้ด้วย ElasticSearch คุณจะต้องรวบรวมกรอบทั้งหมดจากแหล่งที่มา
นั่นคือถ้าคุณมีพื้นที่นั้น (เช่นใน Chromebook ซึ่งมี HD ทั้งหมด 16 ถึง 32 GB)
นอกจากนี้ยังเคยมีปัญหาความไม่ลงรอยกันกับ OpenSSL 1.1 และ libcurl
สิ่งเหล่านี้ได้รับการแก้ไขใน. NET Core เวอร์ชัน 2.2 ล่าสุด
มากสำหรับข้ามแพลตฟอร์ม
ฉันพบคำแถลงเกี่ยวกับเว็บไซต์อย่างเป็นทางการที่กล่าวว่า "โค้ดที่เขียนขึ้นสำหรับมันยังพกพาได้ทั่วทั้งแอปพลิเคชันเช่น Mono"
ตราบใดที่รหัสนั้นไม่ใช้การเรียก WinAPI, Windows-dll-pinvokes, COM-Components, ระบบไฟล์ที่ไม่ต้องใช้ตัวพิมพ์เล็ก - ใหญ่, การเข้ารหัสระบบเริ่มต้น (codepage) และไม่มีปัญหาเกี่ยวกับตัวคั่นไดเรกทอรี แก้ไข. อย่างไรก็ตามรหัส. NET Core ทำงานบน. NET Core ไม่ใช่ใน Mono ดังนั้นการผสมทั้งสองจะเป็นเรื่องยาก และเนื่องจาก Mono ค่อนข้างไม่เสถียรและช้า (สำหรับเว็บแอปพลิเคชัน) ฉันจึงไม่แนะนำเลย ลองประมวลผลภาพบน. NET core เช่น WebP หรือย้าย GIF หรือหลายหน้าจอหรือเขียนข้อความบนภาพคุณจะต้องประหลาดใจอย่างน่าประหลาดใจ
หมายเหตุ:
ตั้งแต่. NET Core 2.0 มี System.Drawing.Common (NuGet) ซึ่งมีฟังก์ชันการทำงานส่วนใหญ่ของ System.Drawing มันควรจะมีคุณสมบัติครบถ้วนมากกว่าหรือน้อยกว่าใน. NET-Core 2.1 อย่างไรก็ตาม System.Drawing.Common ใช้ GDI + และดังนั้นจึงจะไม่ทำงานบน Azure (ห้องสมุด System.Drawing ที่มีอยู่ในบริการ Azure เมฆ [พื้นเพียง VM] แต่ไม่ได้อยู่ใน Azure Web App [ใช้ร่วมกันโดยทั่วไปโฮสติ้ง?])
ดังนั้น ไกล System.Drawing.Common ทำงานได้ดีบน Linux / Mac แต่มีปัญหาเกี่ยวกับ iOS / Android - ถ้ามันทำงานได้ทุกที่นั่น
ก่อนหน้า. NET Core 2.0 กล่าวคือบางช่วงกลางเดือนกุมภาพันธ์ 2017 คุณสามารถใช้SkiaSharpเพื่อถ่ายภาพ(ตัวอย่าง) (คุณยังสามารถทำได้)
โพสต์. net-core 2.0 คุณจะสังเกตเห็นว่าSixLabors ImageSharpเป็นวิธีที่จะไปเนื่องจาก System.Drawing ไม่ปลอดภัยและจำเป็นต้องมีหน่วยความจำรั่วหรือหน่วยความจำเกิดขึ้นจริงซึ่งเป็นเหตุผลว่าทำไมคุณไม่ควรใช้ GDI ในเว็บแอปพลิเคชัน โปรดทราบว่า SkiaSharp นั้นเร็วกว่า ImageSharp มากเพราะใช้ Native-libraries (ซึ่งอาจเป็นข้อเสียเปรียบ) นอกจากนี้โปรดทราบว่าขณะที่ GDI + ทำงานบน Linux & Mac นั่นไม่ได้หมายความว่าทำงานบน iOS / Android
รหัสที่ไม่ได้เขียนสำหรับ. NET (ไม่ใช่คอร์) ไม่สามารถพกพาไปยัง. NET Core ได้
หมายความว่าถ้าคุณต้องการไลบรารี่ที่ไม่ใช่ GPL C # เช่น PDFSharp เพื่อสร้างเอกสาร PDF (ธรรมดามาก) คุณจะโชคไม่ดี(ในขณะนี้)( ไม่ใช่อีกต่อไป ) ไม่ต้องกังวลกับการควบคุม ReportViewer ซึ่งใช้ Windows-pInvokes (เพื่อเข้ารหัสสร้างเอกสาร mcdf ผ่าน COM และรับแบบอักษรตัวอักษรการจัดช่องข้อมูลการฝังแบบอักษรแบบอักษรการวัดสตริงและการแตกบรรทัดและสำหรับการวาดคุณภาพที่ยอมรับได้จริง) และไม่แม้แต่จะเรียกใช้บน Mono บน Linux
( ฉันกำลังทำอยู่ )
นอกจากนี้โค้ดที่เขียนใน. NET Core ไม่สามารถพกพาไปยัง Mono ได้เพราะ Mono ไม่มีไลบรารีรันไทม์. NET Core (จนถึงตอนนี้)
เป้าหมายของฉันคือใช้ C #, LINQ, EF7, visual studio เพื่อสร้างเว็บไซต์ที่สามารถวิ่ง / โฮสต์ใน linux
EF ในทุกรุ่นที่ฉันพยายามมาถึงตอนนี้ช้ามาก (แม้ในสิ่งที่เรียบง่ายเช่นโต๊ะเดียวที่มีหนึ่งซ้ายเข้าร่วม) ฉันไม่อยากจะแนะนำเลย - ไม่ใช่บน Windows เช่นกัน
ฉันจะไม่แนะนำ EF โดยเฉพาะหากคุณมีฐานข้อมูลที่มีข้อ จำกัด เฉพาะหรือคอลัมน์ varbinary / filestream / hierarchyid (ไม่ใช่สำหรับ schema-update เช่นกัน)
และยังไม่ได้อยู่ในสถานการณ์ที่ประสิทธิภาพของฐานข้อมูลเป็นสิ่งสำคัญ (พูดกับผู้ใช้งานพร้อมกันตั้งแต่ 10+ ถึง 100+)
นอกจากนี้การใช้งานเว็บไซต์ / แอปพลิเคชันบน Linux จะช้าลงเรื่อย ๆ หมายความว่าคุณจะต้องแก้ไขข้อบกพร่อง
ไม่มีการสนับสนุนการดีบักสำหรับ. NET Core บน Linux(ไม่ใช่อีกต่อไป แต่ต้องการ JetBrains Rider)
MonoDevelop ไม่สนับสนุนการดีบักโครงการ. NET Core
หากคุณมีปัญหาแสดงว่าคุณเป็นเจ้าของ คุณจะต้องใช้การบันทึกที่กว้างขวาง
โปรดใช้ความระมัดระวังและให้คำแนะนำอย่างละเอียดการบันทึกข้อมูลจะช่วยเติมดิสก์ของคุณในเวลาไม่นานโดยเฉพาะอย่างยิ่งหากโปรแกรมของคุณเข้าสู่วงวนไม่สิ้นสุดหรือการเรียกซ้ำ
สิ่งนี้เป็นสิ่งที่อันตรายโดยเฉพาะอย่างยิ่งหากแอปพลิเคชันเว็บของคุณทำงานเป็นรูทเนื่องจากการลงชื่อเข้าใช้ต้องใช้พื้นที่ไฟล์ logfile หากไม่มีพื้นที่ว่างเหลืออยู่คุณจะไม่สามารถลงชื่อเข้าใช้ได้อีกต่อไป
(โดยปกติประมาณ 5% ของพื้นที่ดิสก์สงวนไว้สำหรับผู้ใช้รูท [ผู้ดูแลระบบ aka บน Windows] ดังนั้นอย่างน้อยผู้ดูแลระบบยังสามารถเข้าสู่ระบบได้หากดิสก์เกือบเต็ม แต่ถ้าแอปพลิเคชันของคุณทำงานเป็นรูท การใช้ดิสก์และ logfiles สามารถใช้พื้นที่ว่างที่เหลือได้ 100% ดังนั้นแม้กระทั่งผู้ดูแลระบบสามารถเข้าสู่ระบบได้อีก)
ดังนั้นจึงเป็นการดีกว่าที่จะไม่เข้ารหัสดิสก์นั่นคือถ้าคุณให้ความสำคัญกับข้อมูล / ระบบของคุณ
มีคนบอกฉันว่าเขาอยากให้มันเป็น "in Mono" แต่ฉันไม่รู้ว่ามันแปลว่าอะไร
หมายความว่าเขาไม่ต้องการใช้. NET Core หรือเขาแค่ต้องการใช้ C # บน Linux / Mac ฉันเดาว่าเขาแค่ต้องการใช้ C # สำหรับ Web-App บน Linux .NET Core คือหนทางที่จะนำไปสู่สิ่งนั้นหากคุณต้องการทำใน C # อย่าไปกับ "โมโนที่เหมาะสม"; ดูเหมือนว่าจะใช้งานได้ในตอนแรก แต่เชื่อฉันว่าคุณจะต้องเสียใจเพราะ ASP.NET MVC ของ Mono ไม่เสถียรเมื่อเซิร์ฟเวอร์ของคุณทำงานในระยะยาว (นานกว่า 1 วัน) - คุณได้รับคำเตือนแล้ว ดูการอ้างอิง "ไม่สมบูรณ์" เมื่อทำการวัดประสิทธิภาพโมโนบนการวัดประสิทธิภาพของเทคโนโลยี
ฉันรู้ว่าฉันต้องการใช้. Net Core 1.0 framework กับเทคโนโลยีที่ฉันระบุไว้ข้างต้น เขายังบอกด้วยว่าเขาต้องการใช้ "fast cgi" ฉันไม่รู้ว่านั่นหมายถึงอะไร
หมายความว่าเขาต้องการใช้ WebServer เต็มรูปแบบประสิทธิภาพสูงเช่น nginx (Engine-X) ซึ่งอาจเป็น Apache
จากนั้นเขาสามารถเรียกใช้ mono / dotnetCore ด้วยชื่อโฮสต์เสมือน (หลายชื่อโดเมนใน IP เดียวกัน) และ / หรือโหลดบาลานซ์ เขายังสามารถเรียกใช้เว็บไซต์อื่น ๆ ด้วยเทคโนโลยีอื่น ๆ โดยไม่ต้องใช้หมายเลขพอร์ตอื่นบนเว็บเซิร์ฟเวอร์ หมายความว่าเว็บไซต์ของคุณทำงานบน fastcgi-server และ nginx ส่งต่อคำขอทางเว็บทั้งหมดสำหรับโดเมนที่ระบุผ่าน fastcgi-protocol ไปยังเซิร์ฟเวอร์นั้น นอกจากนี้ยังหมายถึงเว็บไซต์ของคุณทำงานใน fastcgi-pipeline และคุณต้องระวังสิ่งที่คุณทำเช่นคุณไม่สามารถใช้ HTTP 1.1 เมื่อทำการส่งไฟล์
มิฉะนั้นไฟล์จะถูกอ่านไม่ออกที่ปลายทาง
ดูเพิ่มเติมที่นี่และที่นี่
เพื่อสรุป:
. NET Core ในปัจจุบัน (2016-09-28) ไม่สามารถพกพาได้จริงและไม่เป็นแพลตฟอร์มข้ามแพลตฟอร์ม (โดยเฉพาะอย่างยิ่งเครื่องมือดีบัก)
การรวบรวมแบบเนทีฟนั้นง่ายมากโดยเฉพาะกับ ARM
และสำหรับฉันมันก็ไม่ได้ดูเหมือนว่าการพัฒนาของมันจะเป็น "เสร็จจริงๆ" แต่
ตัวอย่างเช่น System.Data.DataTable / DataAdaper.Update ขาดหายไป ...
(ไม่ได้อยู่กับ. NET Core 2.0 อีกต่อไป)
ร่วมกับส่วนต่อประสาน System.Data.Common.IDB *(ไม่ใช่กับ. NET Core 1.1 อีกต่อไป)
หากเคยมีคลาสหนึ่งที่ใช้บ่อย DataTable / DataAdapter จะเป็นเช่นนั้น ...
นอกจากนี้ตัวติดตั้ง Linux (.deb) ก็ล้มเหลวอย่างน้อยในเครื่องของฉันและฉัน ' ฉันแน่ใจว่าฉันไม่ใช่คนเดียวที่มีปัญหานั้น
แก้ไขข้อผิดพลาดหรืออาจใช้ Visual Studio Code หากคุณสามารถสร้างมันบน ARM (ฉันสามารถทำเช่นนั้นได้ - อย่าติดตามบล็อกโพสต์ของ Scott Hanselman ถ้าคุณทำเช่นนั้น - มีวิธีการในวิกิของ VS-Code บน gitub) เพราะ พวกเขาไม่เสนอปฏิบัติการ
Yeoman ก็ล้มเหลวเช่นกัน (ฉันเดาว่ามันมีบางอย่างที่เกี่ยวข้องกับรุ่น nodejs ที่คุณติดตั้ง - รหัส VS ต้องใช้รุ่นหนึ่ง Yeoman อีกรุ่น ... แต่มันควรจะทำงานบนคอมพิวเตอร์เครื่องเดียวกันค่อนข้างง่อย
ไม่เป็นไรว่าไม่ควรพึ่งพา NodeJS ในครั้งแรก สถานที่.
ไม่เป็นไรว่ามันควรจะทำงานกับรุ่นโหนดที่จัดส่งโดยค่าเริ่มต้น บนระบบปฏิบัติการ
เซิร์ฟเวอร์ kestell ยังทำงานอยู่
และตัดสินจากประสบการณ์ของฉันกับโครงการโมโนฉันสงสัยอย่างมากว่าพวกเขาเคยทดสอบ. NET Core บน FastCGI หรือว่าพวกเขามีความคิดใด ๆ ที่ FastCGI สนับสนุนหมายถึงเฟรมเวิร์กของพวกเขานับประสาที่พวกเขาทดสอบเพื่อให้แน่ใจว่า " อันที่จริงฉันเพิ่งลองสร้าง fastcgi-application กับ. NET Core และเพิ่งรู้ว่าไม่มีห้องสมุด FastCGI สำหรับ. NET Core "RTM" ...
ดังนั้นเมื่อคุณกำลังเรียกใช้. NET Core "RTM" หลัง nginx คุณสามารถทำได้โดย proxying การร้องขอไปยัง kestrell (เว็บเซิร์ฟเวอร์ที่ได้รับมาจากโหนด JSS กึ่งสำเร็จรูป) - ไม่มีการสนับสนุน fastcgi ใน. NET Core "RTM", AFAIK เนื่องจากไม่มีไลบรารี fastcgi core. net และไม่มีตัวอย่างจึงไม่น่าเป็นไปได้อย่างยิ่งที่ทุกคนจะทำการทดสอบเฟรมเวิร์กเพื่อให้แน่ใจว่า fastcgi ทำงานได้อย่างที่คาดไว้
ฉันยังถามถึงประสิทธิภาพ
ในเทคโนโลยีขั้นต้น (เบื้องต้น) (มาตรฐานรอบ 13) , aspnetcore-linux จัดอันดับอยู่ที่ 25% เมื่อเทียบกับประสิทธิภาพที่ดีที่สุดในขณะที่เฟรมเวิร์กที่เทียบเคียงกันได้เช่น Go (golang) อยู่ที่ 96.9% ของประสิทธิภาพสูงสุด - การเข้าถึงระบบเท่านั้น) . NET Core จะดีขึ้นเล็กน้อยในการทำให้เป็นอนุกรม JSON แต่มันก็ดูไม่น่าสนใจอย่างใดอย่างหนึ่ง (ไปถึง 98.5% ของจุดสูงสุด,. NET core 65%) ที่กล่าวว่ามันอาจจะไม่เลวร้ายยิ่งกว่า "เหมาะสมขาวดำ"
นอกจากนี้เนื่องจากมันยังค่อนข้างใหม่ห้องสมุดหลักบางแห่งจึงไม่ได้รับการย้าย (แต่) และฉันสงสัยว่าบางคนจะถูกย้ายเข้า
การสนับสนุนด้านการถ่ายภาพนั้นยังเป็นปัญหาที่ดีที่สุด
สำหรับการเข้ารหัสใด ๆ ให้ใช้ BouncyCastle แทน
คุณสามารถช่วยฉันทำความเข้าใจเงื่อนไขเหล่านี้และความคาดหวังของฉันเป็นจริงได้หรือไม่?
ฉันหวังว่าฉันช่วยให้คุณเข้าใจมากขึ้นเกี่ยวกับข้อกำหนดเหล่านี้ทั้งหมด
เท่าที่การอธิบายของคุณดำเนินไป:
การพัฒนาแอปพลิเคชั่นลีนุกซ์โดยไม่ทราบอะไรเกี่ยวกับลีนุกซ์นั้นเป็นความคิดที่โง่เง่ามากในตอนแรก ที่กล่าวว่าเนื่องจาก Linux ไม่มีค่าลิขสิทธิ์จึงเป็นความคิดที่ดีในหลักการแต่ถ้าคุณรู้ว่าคุณทำอะไร
การพัฒนาแอปพลิเคชันสำหรับแพลตฟอร์มที่คุณไม่สามารถดีบักแอปพลิเคชันของคุณเป็นความคิดที่ไม่ดีจริงๆ
การพัฒนาสำหรับ fastcgi โดยไม่รู้ตัวว่าผลที่ตามมาจะมีความคิดที่ไม่ดีจริง ๆ อีก
การทำสิ่งเหล่านี้ทั้งหมดบนแพลตฟอร์ม "ทดลอง" โดยไม่มีความรู้เฉพาะของแพลตฟอร์มนั้นและไม่มีการสนับสนุนการดีบักเป็นการฆ่าตัวตายหากโครงการของคุณเป็นมากกว่าหน้าแรกส่วนบุคคล ในทางกลับกันฉันเดาว่าการทำมันด้วยโฮมเพจส่วนตัวของคุณเพื่อจุดประสงค์ในการเรียนรู้อาจเป็นประสบการณ์ที่ดีมาก - จากนั้นคุณจะได้รู้ว่ากรอบงานและปัญหาที่ไม่ใช่กรอบคืออะไร
คุณสามารถยกตัวอย่างเช่น (โดยทางโปรแกรม) ลูปเมาต์ case-insensitive fat32, hfs หรือ JFS สำหรับแอปพลิเคชันของคุณเพื่อหลีกเลี่ยงปัญหาเกี่ยวกับ case-sensitive (loop-mount ไม่แนะนำในการผลิต)
เพื่อสรุป
ในปัจจุบัน (2016-09-28) ฉันจะอยู่ห่างจาก. NET Core (สำหรับการใช้งานจริง) บางทีในหนึ่งถึงสองปีคุณสามารถดูอีกครั้ง แต่อาจไม่ก่อน
หากคุณมีโครงการเว็บใหม่ที่คุณพัฒนาให้เริ่มใน. NET Core ไม่ใช่โมโน Goglandบน Linux (และ Windows และ Mac) กระบวนการสร้างของ Golang (และรันไทม์) ก็ไม่ได้ขึ้นอยู่กับ NodeJS ซึ่งเป็นข้อดีอีกอย่างหนึ่ง
หากคุณต้องการกรอบการทำงานที่ทำงานบน Linux (x86 / AMD64 / ARMhf) และ Windows และ Mac ที่ไม่มีการพึ่งพาเช่นการเชื่อมโยงแบบคงที่เท่านั้นและไม่มีการพึ่งพาบน. NET, Java หรือ Windows ให้ใช้ Golang แทน เป็นผู้ใหญ่มากขึ้นและประสิทธิภาพได้รับการพิสูจน์ (Baidu ใช้กับผู้ใช้พร้อมกัน 1 ล้านคน) และ golang มีหน่วยความจำที่ต่ำกว่าอย่างเห็นได้ชัด นอกจากนี้ golang ยังอยู่ในที่เก็บ.. deb ติดตั้งโดยไม่มีปัญหาซอร์สโค้ดคอมไพล์ - โดยไม่ต้องการการเปลี่ยนแปลง - และ golang (ในระหว่างนี้) มีการดีบักการรองรับ delve และ JetBrains
ไกลเท่าที่โมโนไปอยู่ห่างจากมัน
มันไม่มีอะไรสั้นเลยที่น่าประหลาดใจว่าโมโนมาไกลแค่ไหน แต่น่าเสียดายที่มันไม่สามารถทดแทนปัญหาด้านประสิทธิภาพ / ความสามารถในการปรับขนาดและความเสถียรสำหรับแอปพลิเคชั่นการผลิต
นอกจากนี้การพัฒนาแบบโมโนก็ค่อนข้างจะตายพวกเขาส่วนใหญ่พัฒนาเฉพาะส่วนที่เกี่ยวข้องกับ Android และ iOS อีกต่อไปเพราะนั่นคือสิ่งที่ซามารินทำเงิน
อย่าคาดหวังว่าการพัฒนาเว็บจะเป็นพลเมืองซามาริน / โมโนคนแรก
.NET Core อาจคุ้มค่าถ้าคุณเริ่มต้นโครงการใหม่ แต่สำหรับโครงการเว็บฟอร์มขนาดใหญ่ที่มีอยู่การย้ายไปมานั้นไม่ได้เกิดจากการเปลี่ยนแปลงที่จำเป็นอย่างมาก หากคุณมีโครงการ MVC จำนวนการเปลี่ยนแปลงอาจจะจัดการได้หากการออกแบบแอปพลิเคชันดั้งเดิมของคุณมีสติซึ่งส่วนใหญ่ไม่ใช่กรณีของแอปพลิเคชันที่เรียกว่า
การอัปเดตธันวาคม 2559: การ
รวบรวมเนทีฟถูกลบออกจาก. NET Core พรีวิวเนื่องจากยังไม่พร้อม ...
ดูเหมือนว่าพวกเขาได้รับการปรับปรุงอย่างหนักในเกณฑ์มาตรฐานไฟล์ข้อความดิบ แต่ในทางกลับกันมันค่อนข้างบ้า นอกจากนี้ยังลดลงในเกณฑ์มาตรฐาน JSON อยากรู้ว่าเฟรมเวิร์กเอนทิตี้ของจะต้องเร็วกว่าการอัพเดตมากกว่า Dapper - แม้ว่าทั้งสองจะทำงานช้ากว่าเดิม สิ่งนี้ไม่น่าจะเป็นจริงได้ ดูเหมือนว่ายังคงมีมากกว่าข้อบกพร่องเพียงเล็กน้อยที่จะตามล่า
นอกจากนี้ดูเหมือนว่าจะมีการผ่อนปรนที่ด้านหน้า Linux IDE
JetBrains เปิดตัว "Project Rider" ตัวอย่างการเข้าถึงก่อนหน้าของ C # /. NET Core IDE สำหรับ Linux (และ Mac และ Windows) ที่สามารถจัดการไฟล์ Visual Studio Project ได้ ในที่สุด C # IDE ที่ใช้งานได้ & นั่นก็ไม่ช้าเหมือนนรก
บทสรุป:. NET Core ยังคงเป็นซอฟต์แวร์ที่มีคุณภาพก่อนวางจำหน่ายเมื่อเราเข้าสู่ปีพ. ศ. 2560 ย้ายไลบรารี่ของคุณออกไป แต่ควรอยู่ห่างจากมันเพื่อการใช้งานจริงจนกว่าคุณภาพของเฟรมจะเสถียร
และจับตาดู Project Rider
2017 อัปเดต
ย้ายหน้าแรกของฉัน (พี่ชาย) ไปยัง. NET Core ในตอนนี้
จนถึงตอนนี้รันไทม์บน Linux ดูเหมือนว่าจะมีเสถียรภาพเพียงพอ (อย่างน้อยสำหรับโครงการขนาดเล็ก) - มันรอดจากการทดสอบโหลดอย่างง่ายดาย - โมโนไม่เคยทำ
นอกจากนี้ดูเหมือนว่าฉันได้รวม. NET-Core-native และ. NET-Core- การปรับใช้ในตัวเองเข้าด้วยกัน การปรับใช้ที่มีในตัวเองทำงานได้ แต่เป็นบิตภายใต้เอกสารแม้ว่าจะง่ายมาก (เครื่องมือการสร้าง / เผยแพร่ค่อนข้างเสถียร แต่ถ้าคุณพบ "จำนวนบวกที่ต้องการ - สร้างล้มเหลว" - เรียกใช้คำสั่งเดียวกันอีกครั้ง และมันใช้งานได้)
คุณสามารถเรียกใช้
dotnet restore -r win81-x64
dotnet build -r win81-x64
dotnet publish -f netcoreapp1.1 -c Release -r win81-x64
หมายเหตุ: เป็นต่อ .NET หลัก 3 คุณสามารถเผยแพร่ทุกอย่างที่ลดขนาดลงเป็นไฟล์เดียว :
dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true
dotnet publish -r linux-x64 -c Release /p:PublishSingleFile=true
แต่แตกต่างจากการเดินทางก็ไม่ได้ปฏิบัติการเชื่อมโยงแบบคง แต่ไฟล์ซิปขยายตัวเองดังนั้นเมื่อปรับใช้คุณอาจจะเป็นปัญหาที่เกิดขึ้นโดยเฉพาะอย่างยิ่งถ้าไดเรกทอรีชั่วคราวถูกล็อคลงโดยนโยบายกลุ่มหรือบางส่วนปัญหาอื่น ๆ ใช้งานได้ดีสำหรับโปรแกรมสวัสดีโลก และถ้าคุณไม่ย่อเล็กสุดขนาดที่สามารถใช้งานได้จะมีขนาดประมาณ 100 MB
และคุณได้รับไฟล์. exe ที่บรรจุในตัว (ในไดเรกทอรีเผยแพร่) ซึ่งคุณสามารถย้ายไปยังเครื่อง Windows 8.1 โดยไม่ต้องติดตั้ง. NET Framework และปล่อยให้มันทำงาน ดี ที่นี่ที่ dotNET-Core เพิ่งเริ่มได้รับความสนใจ (คำนึงถึงช่องว่าง SkiaSharp ไม่ทำงานบน Windows 8.1 / Windows Server 2012 R2, [ยัง] - ระบบนิเวศต้องติดตามก่อน - แต่น่าสนใจ Skia-dll-load-fail ไม่ได้ขัดข้องทั้งเซิร์ฟเวอร์ / แอปพลิเคชัน - เพื่อให้ทุกอย่างทำงานได้)
(หมายเหตุ: SkiaSharp บน Windows 8.1 ไม่มีไฟล์รันไทม์ VC ที่เหมาะสม - msvcp140.dll และ vcruntime140.dll คัดลอกลงในไดเรกทอรีเผยแพร่และ Skia จะทำงานบน Windows 8.1)
อัปเดตเมื่อสิงหาคม 2560
เปิดตัว. NET Core 2.0
โปรดใช้ความระมัดระวัง - มาพร้อมกับการเปลี่ยนแปลงการรับรองความถูกต้อง (ที่มีจำนวนมาก) ...
กลับหัวกลับหางจะนำคลาส DataTable / DataAdaper / DataSet กลับมาและอีกมากมาย
Realized .NET Core ยังคงขาดการสนับสนุน Apache SparkSQL เนื่องจากMobiusยังไม่ได้รับการจัดพอร์ต ไม่ดีเพราะนั่นหมายความว่าไม่มีการสนับสนุน SparkSQL สำหรับ IoT Cassandra Cluster ของฉันดังนั้นจึงไม่ได้เข้าร่วม ...
สนับสนุน ARM Experimental (รันไทม์เท่านั้นไม่ใช่ SDK - แย่เกินไปสำหรับการพัฒนาบน Chromebook ของฉัน - รอคอยที่ 2.1 หรือ 3.0)
PdfSharp ถูกย้ายไปยัง. NET Core ในขณะนี้
JetBrains Riderออกจาก EAP ตอนนี้คุณสามารถใช้เพื่อพัฒนาและแก้ไขข้อบกพร่อง. NET Core บน Linux - แม้ว่าจะเป็นเพียงแค่. NET Core 1.1 จนถึงการปรับปรุงสำหรับการสนับสนุน. NET Core 2.0
พฤษภาคม 2018 อัพเดต
. NET Core 2.1 ที่ใกล้เข้ามา บางทีนี่อาจจะแก้ไขการรับรองความถูกต้องของ NTLM บน Linux (การรับรองความถูกต้องของ NTLM ไม่ทำงานบน Linux {และอาจเป็น Mac} ใน. NET-Core 2.0 ที่มีหลายส่วนหัวรับรองความถูกต้องเช่นเจรจาต่อรองส่งทั่วไปด้วย ms-exchange แก้ไขใน v2.1 เท่านั้นไม่มีการแก้ไขข้อผิดพลาดสำหรับ 2.0)
แต่ฉันไม่ได้ติดตั้งรุ่นตัวอย่างในเครื่องของฉัน ดังนั้นรอ
v2.1 ได้รับการกล่าวเพื่อลดเวลาในการคอมไพล์ นั่นจะเป็นสิ่งที่ดี
นอกจากนี้โปรดทราบว่าบน Linux, .NET Core เป็น64 บิตเท่านั้น !
ไม่มีและจะไม่มีรุ่น x86-32 ของ .NET หลักบน Linux
และพอร์ต ARM คือ ARM-32 เท่านั้น ยังไม่มี ARM-64
และบน ARM คุณ (ปัจจุบัน) มีเพียงรันไทม์ไม่ใช่ dotnet-SDK
และอีกสิ่งหนึ่ง:
เนื่องจาก. NET-Core ใช้ OpenSSL 1.0,. NET Core บน Linux ไม่ได้ทำงานบน Arch Linux และโดยไม่ได้มาจาก Manjaro (Linux distro ที่ได้รับความนิยมมากที่สุดในขณะนี้) เนื่องจาก Arch Linux ใช้ OpenSSL 1.1 ดังนั้นถ้าคุณใช้ Arch Linux คุณก็โชคไม่ดี (กับ Gentoo ด้วย)
แก้ไข:
.NET Core 2.2+ เวอร์ชันล่าสุดรองรับ OpenSSL 1.1 ดังนั้นคุณสามารถใช้กับ Arch หรือ (k) Ubuntu 19.04+ คุณอาจต้องใช้สคริปต์การติดตั้ง. NET-Coreเนื่องจากยังไม่มีแพ็คเกจ
ในทางกลับกันประสิทธิภาพได้ดีขึ้นอย่างแน่นอน:
.NET Core 3:
.NET-Core v 3.0 ถูกกล่าวเพื่อนำ WinForms และ WPF ไปยัง. NET-Core
อย่างไรก็ตามในขณะที่ WinForms และ WPF จะเป็น. NET Core, WinForms และ WPF ใน. NET-Core จะทำงานบน Windows เท่านั้นเนื่องจาก WinForms / WPF จะใช้ Windows-API
หมายเหตุ:
ขณะนี้. NET Core 3.0 ไม่ทำงาน (RTM) และมีการสนับสนุน WinForms และ WPF แต่สำหรับ C # (บน Windows) เท่านั้น นอกจากนี้ไม่มี WinForms-Core-ออกแบบ ในที่สุดนักออกแบบก็จะมาพร้อมกับการอัปเดต Visual Studio, ค้างคาว สนับสนุน WinForms สำหรับVB.NET ไม่สนับสนุนแต่มีการวางแผนสำหรับ NET 5.0 somewhen ใน2020
PS:
echo "DOTNET_CLI_TELEMETRY_OPTOUT=1" >> /etc/environment
export DOTNET_CLI_TELEMETRY_OPTOUT=1
หากคุณใช้มันในหน้าต่างคุณอาจไม่เคยเห็นสิ่งนี้:
เครื่องมือ. NET Core รวบรวมข้อมูลการใช้งานเพื่อปรับปรุงประสบการณ์ของคุณ
ข้อมูลไม่ระบุชื่อและไม่รวมอาร์กิวเมนต์บรรทัดคำสั่ง
Microsoft รวบรวมข้อมูลและแบ่งปันกับชุมชน
คุณสามารถเลือกไม่ใช้ telemetry ได้โดยตั้งค่าตัวแปรสภาพแวดล้อม DOTNET_CLI_TELEMETRY_OPTOUT เป็น 1 โดยใช้เชลล์ที่คุณชื่นชอบ
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเครื่องมือ .NET หลัก telemetry @
https://aka.ms/dotnet-cli-telemetry
ฉันคิดว่าฉันพูดถึงว่าฉันคิดว่า monodevelop (หรือที่รู้จักกันในชื่อ Xamarin Studio, Mono IDE หรือ Visual Studio Mac ซึ่งตอนนี้เรียกว่าบน Mac) มีการพัฒนาค่อนข้างดีและในขณะเดียวกันก็ใช้งานได้เป็นส่วนใหญ่
อย่างไรก็ตาม JetBrains Rider (2018 EAP ณ จุดนี้) เป็นสิ่งที่ดีกว่าและน่าเชื่อถือมากขึ้น (และตัวถอดรหัสที่รวมอยู่นั้นปลอดภัยกว่า) ซึ่งก็คือถ้าคุณพัฒนา. NET-Core บน Linux หรือ Mac MonoDevelop ไม่สนับสนุน Debug-StepThrough บน Linux ใน. NET Core แต่เนื่องจาก MS ไม่ได้อนุญาตให้ใช้ API การดีบัก API (ยกเว้น VisualStudio Mac ... ) อย่างไรก็ตามคุณสามารถใช้ดีบักเกอร์ Samsung สำหรับ. NET Coreผ่านส่วนขยายการดีบักเกอร์. NET Core สำหรับ Samsung Debugger สำหรับ MonoDevelop
ข้อจำกัดความรับผิดชอบ:
ฉันไม่ได้ใช้ Mac ดังนั้นฉันจึงไม่สามารถพูดได้ว่าสิ่งที่ฉันเขียนที่นี่ใช้กับ FreeBSD-Unix ที่ใช้ Mac ได้เช่นกัน ฉันกำลังอ้างถึง JetBrains Rider, Linux, MonoDevelop / VisualStudioMac / XamarinStudio และ. NET-Core รุ่น Linux (Debian / Ubuntu / Mint) นอกจากนี้ Apple กำลังใคร่ครวญการย้ายจากโปรเซสเซอร์ Intel ไปยังโปรเซสเซอร์ ARM (ARM-64?) ที่ผลิตด้วยตัวเองดังนั้นสิ่งที่ใช้กับ Mac ได้ในตอนนี้อาจไม่สามารถใช้กับ Mac ได้ในอนาคต (2020+)
นอกจากนี้เมื่อฉันเขียน "โมโนค่อนข้างไม่เสถียรและช้า" ความไม่เสถียรเกี่ยวข้องกับแอปพลิเคชัน WinFroms & WebForms โดยเฉพาะการใช้งานเว็บแอปพลิเคชันผ่าน fastcgi หรือ XSP (ในเวอร์ชัน 4.x ของโมโน) รวมถึง XML-serialization - การจัดการที่ไม่ซ้ำกันและค่อนข้างช้าเกี่ยวข้องกับ WinForms และการแสดงออกปกติโดยเฉพาะอย่างยิ่ง (ASP.NET-MVC ใช้การแสดงออกปกติสำหรับการกำหนดเส้นทางเช่นกัน)
เมื่อฉันเขียนเกี่ยวกับประสบการณ์ของฉันเกี่ยวกับ mono 2.x, 3.x และ 4.x นั่นก็ไม่ได้หมายความว่าปัญหาเหล่านี้ยังไม่ได้รับการแก้ไขในตอนนี้หรือตามเวลาที่คุณอ่านหรือถ้าเป็น ได้รับการแก้ไขแล้วในขณะนี้ว่าไม่สามารถมีการถดถอยได้ในภายหลังที่จะแนะนำข้อบกพร่อง / คุณสมบัติเหล่านี้อีกครั้ง และไม่ได้หมายความว่าถ้าคุณฝัง mono-runtime คุณจะได้ผลลัพธ์เช่นเดียวกับเมื่อคุณใช้ runtime mono ของระบบ (dev) มันไม่ได้หมายความว่าการฝัง mono-runtime (ที่ใดก็ได้) นั้นไม่จำเป็น
สิ่งที่ไม่จำเป็นต้องหมายความว่าโมโนนั้นไม่เหมาะสำหรับ iOS หรือ Android หรือมีปัญหาแบบเดียวกัน ฉันไม่ได้ใช้โมโนบน Android หรือ IOS ดังนั้นฉันจึงไม่พูดอะไรเกี่ยวกับความเสถียรการใช้งานต้นทุนและประสิทธิภาพบนแพลตฟอร์มเหล่านี้ เห็นได้ชัดว่าถ้าคุณใช้. NET บน Android คุณจะต้องคำนึงถึงค่าใช้จ่ายอื่น ๆ เช่นน้ำหนัก xamarin เทียบกับต้นทุนและเวลาสำหรับการย้ายรหัสที่มีอยู่ไปยัง Java หนึ่งได้ยินเสียงโมโนบน Android และ IOS จะค่อนข้างดี เอาไปด้วยเม็ดเกลือ อย่าคาดหวังว่าการเข้ารหัสระบบเริ่มต้นจะเหมือนกันบน android / ios เทียบกับ Windows และอย่าคาดหวังว่าระบบไฟล์ android จะไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่และอย่าคาดหวังว่าจะมีตัวอักษร windows ใด ๆ ปรากฏอยู่ .