Wil*_*sch 6 c# xamarin xamarin.mac
我有一个Xamarin.iOS项目,它使用splat库https://github.com/paulcbetts/splat在可移植类库中提供System.Drawing类型.如果父类使用(比方说)System.Drawing.RectangleF,那么通过使用Splat,它可以很好地在Xamarin.IOS代码中继承此类.然而,Xamarin.Mac也是如此,至少不是我这样做的方式.各种类型与自身冲突 - 至少是Point和RectangleF.
我不知道这是否与Xamarin最近的更新(对于Xamarin 6)有关.
下面是一些示例代码,我正在制作一个完整的项目来演示Github上可用的问题.https://github.com/verybadcat/splat - macbug分支.
它看起来类似于这里描述的问题[ 关于Xamarin.iOS的Splat [0.3.4]:RectangleF和PointF的问题.
便携式类库项目:
using System.Drawing;
namespace PCL
{
public class RectOwner
{
public RectangleF Rect { get; set;}
}
}
Run Code Online (Sandbox Code Playgroud)
IOS项目 - 这很好用:
using PCL;
namespace IOSApp
{
public class RectOwnerIOS: RectOwner
{
public RectOwnerIOS ()
{
this.Rect = new System.Drawing.RectangleF (10, 20, 30, 40);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Mac项目 - 不构建:
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何构建Mac项目?
好吧,所以有问题的错误是:
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]'
Run Code Online (Sandbox Code Playgroud)
这实际上是在说“Splat 声称声明了一个 RectangleF,但我找不到它。哦,他们的东西和 RectangleF 与我能找到的不匹配。
如果你查看源代码,这是完全正确的。在 Splat-portable 中,他们声明了自己的 RectangleF 类,但“诱饵和切换”Splat-XamarinMac 没有此类,也没有类型转发器。
您可以通过将 TypeForwardedSystemDrawing.cs 添加到 Split-XamarinMac 项目、重建(并注释掉或修复 UIKit 编译错误)来解决此问题。
请随时向 Splat 团队提出问题以解决此问题。
请注意,如果您尝试将 Splat 移植到 XM 4.5 目标框架,则需要引入 OpenTK,因为由于各种遗留原因,SD 类型是在那里定义的:
$ 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |