我正在尝试执行MonoTouch binding page上显示的内容并向绑定类添加一些方法。它说我要做的就是将它们包含在一个单独的文件中定义的部分类中,该文件包含在使用-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 -r:/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):错误CS0106:修饰符public' is not valid for this item Extensions.cs(10,25): error CS0531:
NodeNameSpace.Node.IsExpanded.get':接口成员不能有定义 Extensions.cs(14,25):错误CS0531:`NodeNameSpace.Node.IsExpanded.set':接口成员不能有定义 编译失败:5个错误,0个警告 btouch:API绑定包含错误。
根据binding上的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);
}
}
}
}
答案 0 :(得分:2)
看起来该页面已过期。进行更多搜索我在论坛中找到了这个post。
编译上面示例的正确命令是:
/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
答案 1 :(得分:2)
这是一个很长的文档页面,但这应该做你想要的:
$ /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