2016-06-17 6 views
6

Ich habe ein Xamarin.iOS-Projekt, das die Splat-Bibliothek https://github.com/paulcbetts/splat verwendet, um System.Drawing-Typen in der tragbaren Klassenbibliothek verfügbar zu machen. Wenn eine Elternklasse (etwa) System.Drawing.RectangleF verwendet, dann funktioniert es mit Splat gut, diese Klasse in Xamarin.IOS-Code zu unterklassifizieren. Das gleiche gilt jedoch nicht für Xamarin.Mac, jedenfalls nicht so, wie ich es mache. Verschiedene Typen widersprechen sich selbst - mindestens Punkt und Rechteck.Typ Auflösung mit Splat-Bibliothek und Xamarin.Mac

Ich weiß nicht, ob dies zu Xamarins jüngsten Updates (zu Xamarin 6) oder nicht verwandt ist.

Ein Beispielcode ist unten und ich mache ein vollständiges Projekt, das das auf Github verfügbare Problem demonstriert. https://github.com/verybadcat/splat - Macbug Zweig.

Es ähnelt dem hier beschriebenen Problem [Splat [0.3.4] on Xamarin.iOS: issues with RectangleF and PointF.

Portable Klassenbibliothek Projekt:

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

Projekt IOS - das funktioniert gut:

using PCL; 

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

Mac Projekt - nicht bauen:

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

Wie kann ich Holen Sie sich das Mac-Projekt zu bauen?

+0

ich herabgestuft Xamarin Studio 5.10 und die entsprechende Xamarin.Mac-Version. Ich sehe immer noch das Scheitern. –

Antwort

3

In Ordnung, so dass der Fehler in Frage:

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

Das ist wirklich sagen „Splat einen RectangleF erklärt haben behauptet, aber ich kann es nicht finden Oh, und ihre Sache und die RectangleF doesn.

Was ist, wenn man sich den Quellcode anschaut, stimmt das. In Splat-portable deklarieren sie ihre eigene RectangleF-Klasse, aber der "Köder-und-Schalter" Splat-XamarinMac haben Sie keine, noch eine Art Forwarder

Sie können dies durch ad beheben ding TypeForwardedSystemDrawing.cs auf das Split-XamarinMac-Projekt, um den UIKit-Kompilierungsfehler neu zu erstellen (und zu kommentieren oder zu reparieren).

Fühlen Sie sich frei, ein Problem mit dem Splat-Team zu öffnen, um dies an ihrem Ende zu beheben.

Sie beachten Sie, wenn Sie in den Hafen Splat auf die XM 4.5 Ziel Rahmen versuchen, müssen Sie in OpenTK ziehen, weil für verschiedene Legacy-Gründen werden die SD-Typen dort definiert:

$ 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 
Verwandte Themen