2016-06-17 18 views
6

Tôi có một dự án Xamarin.iOS sử dụng thư viện splat https://github.com/paulcbetts/splat để tạo các loại System.Drawing có sẵn trong thư viện lớp di động. Nếu một lớp cha sử dụng (nói) System.Drawing.RectangleF, sau đó bằng cách sử dụng Splat, nó hoạt động tốt để phân lớp lớp này trong mã Xamarin.IOS. Tuy nhiên, điều này cũng không đúng với Xamarin.Mac, ít nhất không phải là cách tôi làm. Các loại xung đột với chính chúng - tại một điểm tối thiểu và RectangleF.độ phân giải loại với thư viện Splat và Xamarin.Mac

Tôi không biết điều này có liên quan đến các cập nhật gần đây của Xamarin (với Xamarin 6) hay không.

Một số mã mẫu bên dưới và tôi đang tạo một dự án đầy đủ minh họa sự cố có sẵn trên Github. https://github.com/verybadcat/splat - chi nhánh macbug.

Dường như vấn đề được mô tả ở đây [Splat [0.3.4] on Xamarin.iOS: issues with RectangleF and PointF.

xách tay Class Library dự án:

using System.Drawing; 
namespace PCL 
{ 
    public class RectOwner 
    { 
    public RectangleF Rect { get; set;} 
    } 
} 

dự án IOS - điều này chỉ hoạt động tốt:

using PCL; 

namespace IOSApp 
{ 
    public class RectOwnerIOS: RectOwner 
    { 
    public RectOwnerIOS() 
    { 
     this.Rect = new System.Drawing.RectangleF (10, 20, 30, 40); 
    } 
    } 
} 

dự án Mac - không xây dựng:

using PCL; 


namespace MacApp 
{ 
    public class RectOwnerSubclass: RectOwner 
    { 
    public RectOwnerSubclass() 
    { 
     this.Rect = new System.Drawing.RectangleF (5, 6, 7, 8); // errors here: 
     // /Users/william/Documents/splat/MacApp/RectOwnerMac.cs(16,16): Error CS7069: Reference to type `System.Drawing.RectangleF' claims it is defined assembly `Splat, Version=1.6.2.0, Culture=neutral, PublicKeyToken=null', but it could not be found (CS7069) (MacApp) 
    // /Users/william/Documents/splat/MacApp/RectOwnerMac.cs(23,23): Error CS0029: Cannot implicitly convert type `System.Drawing.RectangleF [Xamarin.Mac, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065]' to `System.Drawing.RectangleF [Splat, Version=1.6.2.0, Culture=neutral, PublicKeyToken=null]' (CS0029) (MacApp) 
    } 
    } 
} 

Làm thế nào tôi có thể có được dự án Mac để xây dựng?

+0

tôi hạ cấp xuống Xamarin Studio 5.10 và phiên bản Xamarin.Mac tương ứng. Tôi vẫn thấy thất bại. –

Trả lời

3

Alright, vì vậy các lỗi trong câu hỏi là:

RectOwnerMac.cs(11,12): error CS7069: Reference to type `System.Drawing.RectangleF' claims it is defined assembly `Splat, Version=1.6.2.0, Culture=neutral, PublicKeyToken=null', but it could not be found 
RectOwnerMac.cs(11,19): error CS0029: Cannot implicitly convert type `System.Drawing.RectangleF [Xamarin.Mac, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065]' to `System.Drawing.RectangleF [Splat, Version=1.6.2.0, Culture=neutral, PublicKeyToken=null]' 

Đó là thực sự nói "Splat tuyên bố để có một RectangleF tuyên bố, nhưng tôi không thể tìm thấy nó Oh, và điều họ và RectangleF doesn. Không khớp với cái tôi có thể tìm thấy

Nếu bạn nhìn vào mã nguồn, là hoàn toàn đúng. Trong Splat-portable họ khai báo lớp RectangleF của riêng họ, nhưng Splat-XamarinMac "mồi và chuyển" không có một hoặc giao nhận kiểu.

Bạn có thể sửa lỗi này bằng quảng cáo ding TypeForwardedSystemDrawing.cs vào dự án Split-XamarinMac, xây dựng lại (và nhận xét hoặc sửa lỗi biên dịch UIKit).

Vui lòng mở sự cố với nhóm Splat để khắc phục sự cố này.

Bạn lưu ý, nếu bạn cố gắng cảng Splat để khuôn khổ mục tiêu XM 4.5, bạn sẽ cần phải kéo trong OpenTK, bởi vì đối với di sản nhiều lý do các loại SD được định nghĩa đó:

$ monop -r:/Library/Frameworks/Xamarin.Mac.framework/Versions/Current/lib/mono/4.5/Xamarin.Mac.dll | grep Drawing.Rectangle 
$ monop -r:/Library/Frameworks/Xamarin.Mac.framework/Versions/Current/lib/mono/4.5/OpenTK.dll | grep Drawing.Rectangle 
System.Drawing.Rectangle 
System.Drawing.RectangleF 
Các vấn đề liên quan