2013-05-09 38 views
11

Tôi đang làm việc để mở rộng số nền tảng được hỗ trợ cho ứng dụng của mình, nó được sử dụng để hỗ trợ .NET4/Windows Store/Windows Phone, nhưng tôi cũng hy vọng sẽ bao gồm Mono cho Android và iOS. Tôi đã đặt tất cả các logic kinh doanh, mô hình và xem các mô hình cho các thư viện lớp di động (PCL) nhưng đó là một tình thế khó xử lớn những gì tập con của nền tảng tôi nên nhắm mục tiêu. Mỗi kết hợp gây ra một cái gì đó để thất bại. Dưới đây là kết quả cho 4 nền tảng mà tôi có thể sử dụng:Tìm kiếm hồ sơ PCL tốt nhất để phát triển đa nền tảng

Tiểu sử 78 (NET45 + WP8 + Store): không có vấn đề với TPL, await/async và hỗ trợ cho thuộc tính CallerMemberName (được sử dụng trong lớp cơ sở kiểu BindableBase view). Tuy nhiên, dự án Mono.Android đề cập đến thư viện như vậy không xây dựng phàn nàn về System.Runtime.dll không hiện tại nên được tham chiếu.

Tiểu sử 104 (NET45 + SL4 + WP75 + Store): await/async không hoạt động, CallerMember name không tìm thấy, nhưng nếu tôi xóa tất cả các tham chiếu đến chúng, dự án Android xây dựng tốt.

Tiểu sử 147 (NET403 + SL5 + WP8 + Store): đang chờ/async không hoạt động, CallerMember name không tìm thấy, nhưng nếu tôi xóa tất cả các tham chiếu đến chúng, dự án Android xây dựng tốt.

Tiểu sử 158 (NET45 + SL5 + WP8 + Store): đang chờ/async không hoạt động, CallerMember name không tìm thấy, nhưng nếu tôi xóa tất cả các tham chiếu đến chúng, dự án Android xây dựng tốt.

Vì vậy, tôi không thực sự chắc chắn nên chọn gì. Hồ sơ 78, 104, 147 bị giới hạn, hồ sơ 78 là người duy nhất hỗ trợ cả await/async và CallerMemberName đã sử dụng BindableBase, nhưng nó không thành công trên Android phàn nàn về System.Runtime.dll. Vì vậy, nếu bạn có một kinh nghiệm với những gì PCL hồ sơ là trận đấu tốt nhất cho PCL nhắm mục tiêu Mono, xin vui lòng chia sẻ suy nghĩ của bạn.

+0

Đảm bảo sử dụng 'Microsoft.Bcl.Async' (tùy thuộc vào' Microsoft.Bcl'). Chúng thêm hỗ trợ async/await/CallerMemberName vào hồ sơ 104/147/158. –

+0

Microsoft.Bcl.Async chỉ có thể được phân phối trên nền tảng Windows (cho đến nay). Không có Mono. –

+0

@VagifAbilov cấp phép đã được thay đổi trên Microsoft.Bcl.Async http://www.hanselman.com/blog/PortableClassLibrariesJustGotREALLYUsefulWithNewLicensingChanges.aspx –

Trả lời

11

Suy nghĩ về số hồ sơ rất khó - Tôi thích nghĩ về mặt nền tảng hơn.

Lý tưởng nhất là tôi rất muốn dự án của tôi để hỗ trợ:

  • Net 3.5 trở lên
  • SL3 và cao hơn
  • điện thoại WP7.x và cao hơn
  • MonoDroid 1.6 và cao hơn
  • MonoTouch iOS6 trở lên
  • (Máy tính để bàn Mac OSX Lion)

Dự án PCL chính mà tôi hỗ trợ là MvvmCross - yêu cầu cơ sở vật chất của Mvvm như ICommand. Các cơ sở này chỉ có sẵn trong các nền tảng cho Net 4.5 và cao hơn ... đó là một giới hạn cứng - không có gì tôi có thể làm gì về nó - vì vậy thay đổi nhu cầu của tôi để:

  • Net 3.5 trở lên Net 4.5
  • SL3 và cao hơn SL4 và cao hơn
  • điện thoại WP7.x và cao hơn
  • MonoDroid 1.6 và cao hơn
  • MonoTouch iOS6 và cao hơn
  • (Mac để bàn OSX Lion)

Với lựa chọn ở nơi này, sau đó điều này dẫn tôi đến một số hồ sơ - 104 (không biết cách nền tảng quyết định này. .. đã từ bỏ yêu cầu một thời gian dài trước đây!)

Vì vậy, tôi đã nhắm mục tiêu MvvmCross tại hồ sơ 104 - và nó sẽ ở lại đó trong khi hỗ trợ WP7.x vẫn còn cần thiết.

Lựa chọn này có nghĩa là MvvmCross không thể out-of-the-box hỗ trợ những thứ như async/awaitCallerMemberName - nhưng đây là một sự thỏa hiệp, chúng tôi đã quyết định làm - chúng tôi có những người dùng cần WP7.


Tuy nhiên, một số người được hỏi về chờ đợi/async ...

Để sử dụng những tính năng mới, có một số BCL.Async NuGet hacks để làm cho họ làm việc trong hồ sơ 104 ... hoặc những người dùng có thể nhắm mục tiêu ứng dụng của họ tại một hồ sơ mới hơn (không hỗ trợ WP7.x và SL4) - điều này dẫn họ xây dựng ứng dụng của họ trong hồ sơ 78, nhưng để thêm tham chiếu vào cấu hình 104 hồ sơ của tôi.

Cả hai bộ giải pháp này hoạt động rất tốt với cặp song sinh Xamarin hiện nay - ví dụ: bạn nhấn các vấn đề như hội tụ System.Runtime.dll còn thiếu. Tuy nhiên, tôi dự đoán rằng khi Xamarin chính thức hỗ trợ PCLs (và sau một số thử nghiệm alpha/beta) thì những vấn đề này sẽ được giải quyết. hỗ trợ chính thức này là do rất sớm ngay bây giờ - đó là lý do tôi không bận tâm rộng quá nhiều thời gian của tôi suy nghĩ về những vấn đề này ...


Tôi hy vọng trong trung hạn mà MvvmCross sẽ giảm hỗ trợ cho WP7 .x và SL4. Khi điều đó xảy ra, chúng tôi cũng có thể di chuyển các thư viện chính sang hồ sơ 78.


Nền tảng lớn duy nhất khác mà tôi biết đã bắt đầu hỗ trợ PCL là ReactiveUI. Tôi tin rằng nền tảng này phải sử dụng tiểu sử 78 vì phiên bản Phản hồi của PCL từ Microsoft đang nhắm mục tiêu 78.

+0

Cảm ơn Stuart, câu trả lời tuyệt vời như mọi khi. Tôi phải kiểm tra xem BindableBase quan trọng như thế nào đối với ứng dụng của tôi. Tôi đoán bạn đã lên kế hoạch thay thế cho nó trong MvvmCross. –

+0

Dunno - BindableBase là gì? Có phải chỉ https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross/ViewModels/MvxNotifyPropertyChanged.cs với các phương thức 'CallerMemberName' được thêm vào không? – Stuart

+1

Phần thiết yếu của BindableBase là: SetProperty (ref T storage, T value, [CallerMemberName] String propertyName = null) Vì vậy, nó lớn hơn MvxNotifyPropertyChanged. –

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