2011-09-30 49 views
1

我正在嘗試做什麼在MonoTouch binding page上顯示,並添加一些方法到綁定類。它表示我所要做的就是將這些包含在一個單獨的文件中定義的部分類中,該文件包含在使用-s選項的生成過程中。問題是生成的類不是部分類,當我運行btouch時,出現以下錯誤:MonoTouch綁定不創建部分類

$/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:/開發人員/ 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):error CS0106:The modifier public' is not valid for this item Extensions.cs(10,25): error CS0531: NodeNameSpace.Node.IsExpanded.get':interface members can not have a definition Extensions.cs(14,25):error 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); 
      } 
     } 
    } 
} 

回答

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這是使用whe n編譯你的接口到一個部分類(對於擴展方法來說太早)並將綁定編譯到一個.dll。

你想要什麼是-x源代碼文件將只被用於第二次彙編(源.DLL)。 -s選項對於枚舉最爲有用,因爲您將需要它們在這兩個您的接口和最終程序集(.dll)中。

要獲得進一步的幫助做:

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

我在幫助中看不到-x。我也嘗試使用它時出錯:錯誤CS2007:無法識別的命令行選項:'-x:Extensions.cs' – BLeB

+0

$/Developer/MonoTouch/usr/bin/mtouch --version mtouch 4.2.2.1317158288 – BLeB

+0

對不起,這是一箇舊的更改(9月5日),但它看起來沒有反向移植到monotouch-4.2分支。它*將*在未來版本中可用(來自'主')。與此同時,您可以聯繫[email protected]來申請該工具的更新二進制文件(僅鏈接到此問題)。 – poupou

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 
+0

這適用於什麼是目前釋放。當-x選項在發佈版本中可用時,我會嘗試一下,然後更新答案。 – BLeB