30/09/2018, 19:32
Code C# trên Linux
Em đang có ý định học thêm C#, mà ngôn ngữ này theo em biết là do Microsoft phát triển. Em thì xài Linux (do trước giờ chỉ code C với C++), vậy cho em hỏi Linux có IDE nào hỗ trợ code C# không và Linux có hỗ trợ tốt cho C# không ạ?
Bài liên quan
Hiện tại thì một là Linux, hai là C#. Chỉ 1 trong 2
Bạn thử Mono project xem sao
Nghe nói có thể code C# trên linux, macos đc luôn
http://www.monodevelop.com/
Em chỉ muốn xài linux
Linux và người phát triển / sử dụng thì đa phần rất là ghét Microsoft.
Chương trình viết bằng C# thì phần lớn không thể chạy trên Linux.
C# đâu phải là open-source mà trên Linux hay Mac OS X có thể lấy mà dùng đc. Mà đã là dùng Linux thì phải tư tưởng code là phải thoáng. Nếu nhất quyết muốn code C# thì cài Windows. Là lập trình viên thì phải biết chọn phe và chọn vũ khí cho nó đúng, cũng như làm đầu bếp muốn thái thịt thì phải dùng dao chứ chả ai lôi búa với côn ra chặt thịt.
Thế C# nó không thoáng ở chỗ nào và code trên Linux nó thoáng ở chỗ nào vậy bạn ?
Không dùng được vì môi trường nó không tương thích chứ bè phái gì ở đây.
C# compiler open-source bạn nhé http://www.infoq.com/news/2014/04/roslyn_oss
Vì ít ai viết C# trên linux chứ không phải là không thể chạy trên linux. Bản thân C# cũng chỉ là một ngôn ngữ, chỉ cần có thể dịch ngôn ngữ sang mã máy thì nền tảng nào cũng có thể chạy được. (Và chúng ta có Mono project là một trong số những thứ có thể làm được điều đó
Nếu bạn muốn code C# trên linux có thể thử https://code.visualstudio.com/
hoặc http://www.monodevelop.com/
C# được dịch ra MSIL - mã trung gian không phải ngôn ngữ máy. Cần phải có JIT để dịch ra mã máy và Linux có cài được cái này không.
Mono không thể giải quyết tất cả vấn đề. Rất nhiều chương trình viết bằng C# không thể chạy trên Linux bất kể có Mono hay không.
Người ta không viết C# trên Linux vì viết xong không chạy được, không debug được thì viết luôn trên Windows cho khỏe.
Và trong cả trường hợp ngôn ngữ nào đó được dịch sang ngôn ngữ máy cũng không thể chạy trên mọi hệ điều hành. Đơn cử game viết bằng C++ dịch ra ngôn ngữ máy cho Windows chắc gì đã chạy được trên Linux hay MacOS.
@Duong_Act thiết nghĩ việc chương trình C# không chạy được trên linux là do có các thư viện, hàm không chạy được trên linux. Khi đó ta phải tìm thư viện, hàm thay thế. (Có thể dùng chỉ dẫn biên dịch hoặc
System.Environment.OSVersion.Platform
để kiểm tra nền tảng) chứ không thể vứt y nguyên cái code C# trên Window rồi bảo run trên Linux đượchttp://www.mono-project.com/docs/faq/technical/
Bản thân các máy tính khác nhau có binary/assemply khác nhau, phụ thuộc vào HĐH và cấu trúc CPU. Bạn không thể dịch ra ngôn ngữ máy window mà đem sang Linux bảo nó chạy được.[quote=“Levis, post:10, topic:20310”]
C# khi compile sẽ được chuyển về dạng MSIL, và cần 1 Jit Compiler nữa để chuyển về dạng mã máy.
[/quote]
@Levis cái này mình biết, mình chỉ muốn tóm gọn cái quá trình lại, cái giai đoạn quan trọng là chương trình có chạy được trên máy hay không phụ thuộc nhiều vào việc có dịch ra được mã máy hay không (JIT <-- )
Cùng quan điểm với bạn ở đoạn sau
Chương trình viết bằng C# không chạy được trên Linux nó có nhiều nguyên nhân không đơn giản là thiếu thư viện hay tập tin… Việc khắc phục (việc tìm thư viện hay gì đó) có thể được hoặc không.
Vấn đề không chạy được còn do không có cơ chế nào dịch được toàn bộ MSIL ra binary cho Linux nên sẽ có chương trình viết trên C# không chạy được.
Câu chuyện giống như việc vì sao Xamarin cross-platform vậy. Đơn giản là xamarin add thêm một nắm thư viện vào rồi khi biên dịch thì chuyển sang native api của platform. Tương tự cho vấn đề hiện tại.
Cái này mình không làm trên linux cho nên cứ tạm cho là đúng vậy. Nhưng không được 10 thì cũng 8-9. Mình lúc trước có biết một anh làm cross-platform (mà nói thật thì có đầy các Project Cross-platform), tất nhiên không phải bằng C#, sở dĩ các project có thể cross-platform được là vì có các API tương tự nhau. (chứ Win có hàm tạo cửa sổ mà Linux không có hàm tương tự thì các Project trên hiển thị cái mô ?)
Hiện tại mình đọc trên trang này khi cố gắng chạy App C# trên Linux nhưng thất bại.
Ứng dụng của mình là WPF và theo trang này nói rằng chạy App C# trên Linux cần hỗ trợ của Mono nhưng nó không support WPF. Như vậy nếu mã có chứa MSIL của WPF thì …
https://social.msdn.microsoft.com/Forums/vstudio/en-US/0a4c924d-ef24-45a9-a552-6d58e5578e3a/how-can-i-run-my-wpf-application-on-linux?forum=wpf.
Đừng bao giờ (và làm ơn đừng bao giờ) đánh đồng một công nghệ và một ngôn ngữ lập trình (trong nhiều trường hợp là ngôn ngữ lập trình và ide). Chúng không giống nhau đâu. Cả GUI từ Winform và GUI từ mono trên Linux (hoặc nền tảng khác) cũng tạo ra từ những thứ khác nhau bạn nhé.[quote=“Duong_Act, post:15, topic:20310”]
Như vậy nếu mã có chứa MSIL của WPF thì …
[/quote]
Có thể mình nhầm, nhưng hình như WPF đâu có dịch ra MSIL, nó được tạo ra từ file XAML.
Có ai đang đánh đồng chúng với nhau đâu bạn ?
XAML một ngôn ngữ, là cái để định nghĩa, mô tả giao diện. C# dùng để code xử lý. Kết quả cuối cùng vẫn là MSIL.
Mình mô tả thế nay nhé. Chúng ta đang nói về code C# trên Linux, có nghĩa là chúng ta phải dùng code C#, đem sang Linux và build nó ở đây (hi vọng không có ai đem file exe sang linux chạy thử). Nếu bạn đem WPF project code sang Linux và build trên mono thì tất yếu là không chạy được, nó lấy cái mô gì mà chạy cho bạn. WPF cần support DirectX và WPF (Window Presentation API) cũng là hàng Window specific. Nó không chạy được vì nó không hỗ trợ (về công nghệ). Nhưng về bản chất thì C# (ngôn ngữ) nó vẫn có thể compile và built trên linux như thường, chỉ cần bạn không đem một đống hàng window sang và bảo nó chạy.
http://www.mono-project.com/docs/gui/wpf/
Vậy vấn đề “debug” ?
Bởi thế nên chủ top cứ xác định là 1 trong 2 mà thôi
WPF là GUI rồi, GUI thì chả có thư viện nào 100% tương thích với mọi OS hết. Qt nghe nói trong Mac khá tệ. Ví dụ nói code C trên X trên Y có ai đòi phải code được thư viện gui của X trên Y thì mới gọi là code C trên Y được?
còn mấy cái khác thì cái có cái chưa có, nhưng nói chung vẫn code 1 phần C# trên Linux được chứ ko phải là hoàn toàn ko được.
Nguyên cái visual studio để code C# không xài… chạy qua kia tự làm khó mình…
Một chút vấn đề. Mình muốn cố gắng giải thích là C# không phải là WPF và người ta không code C# vì WPF (ít nhất là không hoàn toàn như vậy)
Do đó chẳng lí do gì chọn lựa ở đây cả, thích thì vẫn có thể code được dù có thể không bằng trên window
http://www.monodevelop.com/archived/developers/tasks/tools/debugger/