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 ạ?

Văn Dương viết 21:41 ngày 30/09/2018

Hiện tại thì một là Linux, hai là C#. Chỉ 1 trong 2

*grab popcorn* viết 21:32 ngày 30/09/2018

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/

Phạm Văn Hoàng viết 21:36 ngày 30/09/2018

Em chỉ muốn xài linux

Văn Dương viết 21:44 ngày 30/09/2018

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.

Lập Trình Sư viết 21:35 ngày 30/09/2018

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.

Văn Dương viết 21:37 ngày 30/09/2018

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.

GodOfGod viết 21:34 ngày 30/09/2018

C# đâu phải là open-source mà trên Linux hay Mac OS X có thể lấy mà dùng đc

C# compiler open-source bạn nhé http://www.infoq.com/news/2014/04/roslyn_oss

Chương trình viết bằng C# thì phần lớn không thể chạy trên Linux.

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.

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/

Văn Dương viết 21:46 ngày 30/09/2018

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.

GodOfGod viết 21:46 ngày 30/09/2018

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.

@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 được
http://www.mono-project.com/docs/faq/technical/

What is a 100% .NET application?

A ‘100% .NET application’ is one that only uses the APIs defined 
under the System namespace and does not use P/Invoke. These applications
 would in theory run unmodified on Windows, Linux, Solaris, MacOS X and 
others. Note that this requirement also holds for all assemblies used by
 the application. If one of them is Windows-specific, then the entire 
program is not a 100% .NET application. Furthermore, a 100% .NET 
application must not contain non-standard data streams in the assembly. 
For example, Visual Studio .NET will insert a #- stream 
into assemblies built under the “Debug” target. This stream contains 
debugging information for use by Visual Studio .NET; however, this 
stream can not be interpreted by Mono (unless you’re willing to donate 
support). Thus, it is recommended that all Visual Studio .NET-compiled 
code be compiled under the Release target before it is executed under 
Mono.

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.

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

Văn Dương viết 21:47 ngày 30/09/2018

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.

GodOfGod viết 21:37 ngày 30/09/2018

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.

Việc khắc phục (việc tìm thư viện hay gì đó) có thể được hoặc không.

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ô ?)

Văn Dương viết 21:41 ngày 30/09/2018

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.

GodOfGod viết 21:34 ngày 30/09/2018

Đừ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.

Văn Dương viết 21:45 ngày 30/09/2018

Đừ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é.

Có ai đang đánh đồng chúng với nhau đâu bạn ?

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.

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.

GodOfGod viết 21:44 ngày 30/09/2018

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ăn Dương viết 21:40 ngày 30/09/2018

Vậy vấn đề “debug” ?

Văn Dương viết 21:35 ngày 30/09/2018

Bởi thế nên chủ top cứ xác định là 1 trong 2 mà thôi

viết 21:46 ngày 30/09/2018

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.

IDL viết 21:41 ngày 30/09/2018

Nguyên cái visual studio để code C# không xài… chạy qua kia tự làm khó mình…

GodOfGod viết 21:41 ngày 30/09/2018

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)

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?

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

Vậy vấn đề “debug” ?

http://www.monodevelop.com/archived/developers/tasks/tools/debugger/

Bài liên quan
0