2016-06-17 18 views
6

Ho un progetto Xamarin.iOS che utilizza la libreria splat https://github.com/paulcbetts/splat per rendere disponibili i tipi System.Drawing nella libreria di classi portatili. Se una classe genitore usa (diciamo) System.Drawing.RectangleF, quindi usando Splat, funziona bene sottoclasse questa classe nel codice Xamarin.IOS. Tuttavia, lo stesso non è vero per Xamarin.Mac, almeno non nel modo in cui lo sto facendo. Vari tipi sono in conflitto con se stessi - al minimo Point and RectangleF.con libreria Splat e Xamarin.Mac

Non so se questo è correlato agli aggiornamenti recenti di Xamarin (a Xamarin 6) oppure no.

Alcuni esempi di codice sono sotto, e sto facendo un progetto completo dimostrando il problema disponibile su Github. https://github.com/verybadcat/splat - ramo macbug.

Sembra simile al problema descritto qui [Splat [0.3.4] on Xamarin.iOS: issues with RectangleF and PointF.

Class portatile progetto Libreria:

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

progetto IOS - questo funziona bene:

using PCL; 

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

Mac progetto - non costruisce:

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) 
    } 
    } 
} 

Come posso ottenere il progetto Mac per costruire?

+0

ho declassato a Xamarin Studio 5.10 e la corrispondente versione di Xamarin.Mac. Vedo ancora il fallimento. –

risposta

3

Va bene, così l'errore in questione è:

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]' 

Che è davvero dicendo "Splat affermato di avere un RectangleF dichiarato, ma non riesco a trovarlo Oh, e la loro cosa e l'RectangleF doesn. Corrisponde a quello che riesco a trovare

Quale se si guarda il codice sorgente, è completamente vero. In Splat-portable dichiarano la propria classe RectangleF, ma il "bait-and-switch" Splat-XamarinMac fa non ne hai uno, né un type forwarder

Puoi aggiustarlo per annuncio ding TypeForwardedSystemDrawing.cs al progetto Split-XamarinMac, ricostruendo (e commentando o correggendo l'errore di compilazione UIKit).

Sentiti libero di aprire un problema con il team di Splat per risolvere il problema alla fine.

nota impegno, se si tenta di porto Splat al framework di destinazione XM 4.5, è necessario tirare in OpenTK, perché per vari motivi eredità i tipi di SD sono definiti c'è:

$ 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 
Problemi correlati