2008-09-03 37 views
20

Tôi đang tìm cách viết một số mã C# cho linux/windows/mac/bất kỳ nền tảng nào khác và đang tìm kiếm các phương pháp hay nhất cho mã di động.Thực hành tốt nhất cho di động C#

Dự án mono có một số tài nguyên tuyệt vời porting.

Thực tiễn tốt nhất cho C# di động là gì?

Trả lời

14

Tôi đã thực sự sử dụng biểu mẫu thắng và điều đó là tốt. Đó là BUTT UGLY, nhưng nó hoạt động.

Rõ ràng, không sử dụng P/Gọi, hoặc bất kỳ công cụ win32 nào như đăng ký. Ngoài ra hãy nhận thức của bất kỳ bên thứ ba của DLL. Ví dụ, chúng tôi sử dụng một dll SQLite bên thứ ba mà thực sự có chứa mã nguồn gốc trong đó mà chúng ta phải trao đổi nếu chúng ta muốn chạy trên OSX/linux.

+2

Gendarme và MoMA cũng có thể trợ giúp. – user7116

6

Không sử dụng Windows.Forms cho GUI, nhưng Mono có thể đã đề cập đến điều đó rồi. Gtk # phù hợp hơn và đáng tin cậy hơn cho các GUI nền tảng chéo.

2

Nếu bạn muốn mã di động, bạn cần phải xem xét kỹ danh sách các tính năng đã hoàn thành trên trang web Mono. Họ đi vào chi tiết về từng lớp trong khuôn khổ và mức độ hoàn chỉnh. Bạn sẽ phải xem xét những điều này trong quá trình thiết kế để bạn không đi quá xa một con đường và khám phá ra rằng một tính năng quan trọng vẫn chưa được triển khai.

15

Tôi ghét thuật ngữ "Thực hành tốt nhất" vì có vẻ như một số thực tiễn có thể là tốt nhất trong mọi ngữ cảnh, đó là một điều nguy hiểm, nhưng tôi sẽ nói điều tôi xem là "Thực hành tốt" cho mã đa nền tảng (và đối với hầu hết các loại hình phát triển khác):

Sử dụng công cụ tích hợp liên tục và xây dựng cho tất cả nền tảng mục tiêu mọi lúc.

Âm thanh quá phức tạp? Vâng, nếu bạn thực sự cần phải hỗ trợ nhiều nền tảng, tốt hơn để làm điều đó. Cho dù bạn sử dụng mã và thư viện cẩn thận đến mức nào, nếu bạn thử nghiệm quá muộn, bạn sẽ thấy mình phải mất nhiều thời gian để làm lại các phần lớn của ứng dụng.

3

Một vài năm trước, tôi đã khuyên bạn nên mua cho mình bản sao book trên nền tảng .NET của mình, nhưng vì cuốn sách hơi lỗi thời bây giờ bạn thực sự cần phải dính vào thông tin của Mono trang web.

Công cụ Mono Migration Analyzer (MoMA) là khá tốt để phân tích ứng dụng .NET hiện có và cảnh báo bạn về các vấn đề về tính di động, nhưng đặt cược tốt nhất cho mã mới là sử dụng phiên bản ổn định mới nhất của Mono cho công việc phát triển của bạn.

Như Orion nói bạn cần cẩn thận khi sử dụng các tệp DLL của bên thứ ba, mặc dù đồng tác giả của tôi đã viết công cụ NativeProbe để phân tích các tệp DLL cho P/Invoke dependenecies nếu bạn muốn kiểm tra nhanh phần mềm của bên thứ ba.

Nếu bạn quyết tâm phát triển trên MS .NET thì bạn nên thử và đảm bảo bạn cũng xây dựng và thử nghiệm đơn vị trên Mono và bạn cũng nên xem một số không gian tên Windows cụ thể như Microsoft.Win32 và Hệ thống .Quản lý không gian tên.

1

Có một số điều đơn giản khác. Giống như không giả định các ký tự đường dẫn. Hoặc newlines.

Tôi là một trong những người thường xuyên biên dịch NUnit trên Mono trên Linux hoặc OSX.

Ngoài ra, đừng cho rằng các trình biên dịch hoạt động chính xác như nhau.Gần đây, chúng tôi đã tìm thấy sự cố trong đó trình biên dịch MS C# dường như bao gồm những thứ mà trình đơn Mono không thực hiện, yêu cầu các tham chiếu bổ sung trong tập lệnh xây dựng của chúng tôi.

Ngoài ra, nó đã được khá đơn giản. Tôi nhớ lần đầu tiên chúng tôi đã nhận the GUI running on Mono/Linux - nó đã được khá thú vị (ngay cả khi nó khá xấu xí)

11

Coi chừng bất cứ điều gì để làm với tên tập tin và thao tác đường dẫn và tận dụng các phương pháp cầm tay NET trong System.IO.Path tức .

thay vì:

string myfile = somepath + "\\file.txt"; 

làm:

string myfile = Path.Combine(somepath, "file.txt"); 

Nếu bạn cần phải xác định một dấu phân cách đường sau đó bạn sẽ sử dụng Path.Separator vv

10

Không sử dụng " \ r \ n "cho một dòng mới. Sử dụng Environment.NewLine

Hãy nhớ rằng:

  • * NIX chỉ sử dụng kí tự xuống dòng ("\ n")
  • Windows sử dụng "\ r \ n"
  • MacIntosh sử dụng "\ r "(Tôi không thực sự chắc chắn về điều này - cảm thấy tự do để sửa tôi).

L.E .: Dường như một số MacOS mới hơn không sử dụng dấu phân cách dòng "\ r" nữa.

+0

Macintosh SỬ DỤNG để sử dụng \ r. Những ngày này nó sử dụng \ n, nhờ vào cơ sở BSD. Không chắc chắn chính xác khi nào nó thay đổi. Nó vẫn có thể là một vấn đề mặc dù. –

1

Một mục bị thiếu: Đảm bảo rằng tên tệp phân biệt chữ hoa chữ thường. File.Open ("MyFile.txt"); sẽ không hoạt động trên Unix nếu tệp của bạn có tên là myfile.txt.

Các vấn đề liên quan