MonoTouch绑定不创建分部类

本文关键字:创建 绑定 MonoTouch | 更新日期: 2023-09-27 18:10:12

我正在尝试做MonoTouch绑定页面上显示的内容,并向绑定类添加一些方法。它说我所要做的就是将这些包含在一个单独的文件中定义的部分类中,该文件包含在使用-s选项的生成过程中。问题是生成的类不是部分类,当我运行btouch时,我得到以下错误:

$/Developer/MonoTouch/usr/bin/btouch -v Node.cs -s:Extensions.cs/Developer/MonoTouch/usr/bin/smcs -unsafe -target:library Node.cs -nowarn:436 out:/var/folders/cy/g71b7mr91rn4slbpq5cm39140000gn/T/u983s550.k1k/temp.dll -r:/Developer/MonoTouch/usr/lib/btouch/btouch.exe Extensions.cs:/Developer/MonoTouch/usr/lib/mono/2.1/MonoTouch .dll
Node.cs(7,19):错误CS0260:在类型NodeNameSpace.Node'. Another partial declaration of this type exists Extensions.cs(5,30): (Location of the symbol related to previous error) Extensions.cs(5,30): error CS0261: Partial declarations of NodeNameSpace的声明中缺少部分修饰符。Node'必须是所有类、所有结构或所有接口Node.cs(7,19):(与先前错误相关的符号位置)Extensions.cs(7,29): error CS0106: The modifier public' is not valid for this item Extensions.cs(10,25): error CS0531: NodeNameSpace.Node.IsExpanded。接口成员不能有定义Extensions.cs(14,25):错误CS0531: ' nodenamspace . node . isexpanded . '接口成员不能有定义编译失败:5个错误,0个警告btouch: API绑定包含错误。

根据MonoTouch页面上的绑定:

生成器从API定义文件生成的每个类都是一个部分类

Node.cs

using System;
using MonoTouch.Foundation;
namespace NodeNameSpace
{
    [BaseType (typeof (NSObject))]
    interface Node
    {
        [Export ("expanded")]
        NSNumber Expanded { get; set; }
    }
}

Extensons.cs

using MonoTouch.Foundation;
namespace NodeNameSpace 
{
    public partial class Node
    {
        public bool IsExpanded
        {
            get
            {
                return Expanded.BoolValue;
            }
            set
            {
                Expanded = NSNumber.FromBool(value);
            }
        }
    }
}

MonoTouch绑定不创建分部类

这是一个很长的文档页面,但这应该可以满足您的需求:

$ /Developer/MonoTouch/usr/bin/btouch Node.cs -x:Extensions.cs  
$ ls -l Node.dll 
-rwxr-xr-x  1 sebastienpouliot  staff  5120 30 Sep 13:30 Node.dll

您的问题是使用-s,这是在将接口编译为部分类(对于扩展方法来说为时尚早)并将绑定编译为.dll时使用的。

您想要的是-x,其中源文件仅用于第二次编译(源到.dll)。-s选项对于枚举最有用,因为在接口和最终程序集(.dll)中都需要它们。

要获得进一步帮助,请执行:

/Developer/MonoTouch/usr/bin/btouch --help

那页好像过时了。做了更多的搜索,我在论坛上找到了这篇文章。

编译上面例子的正确命令是:
/Developer/MonoTouch/usr/bin/btouch -v Node.cs --sourceonly genfiles --outdir=gen

紧随其后:

/Developer/MonoTouch/usr/bin/smcs -out:Node.dll `cat genfiles` Extensions.cs -r:/Developer/MonoTouch/usr/lib/mono/2.1/monotouch.dll -target:library