0

Xamarin iOSバインディングライブラリのサードパーティ製SDKコードのsharpieツールで生成されたコードで重複したコンストラクタに関する問題があります。基本的にC#で生成されたインターフェイスはNSFileHandleを基本型として使用しており、SDKヘッダファイルはNSFileHandlerのようなサブクラスで同じ指定初期化子を宣言しているので、現在はバインディングライブラリがC#コンストラクタを2回生成しているので "Member ... already defined error"ベースクラスからはじめて、サブクラス化されたイニシャライザからは2番目になります。Xamarin iOSバインディングライブラリの重複したコンストラクタの問題

Objective-Cのコード:ライブラリのコードを結合

@interface MyFileHandle : NSFileHandle 
//... 
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER; 
//... 

のC#:

[BaseType(typeof(NSFileHandle))] 
public interface MyFileHandle 
{ 
    //... 
    [Export("initWithCoder:")] 
    [DesignatedInitializer] 
    IntPtr Constructor(NSCoder coder); 
    //... 
} 

バインディングライブラリコード(* .g.cs)を生成:

[Register("MyFileHandle", true)] 
public unsafe partial class MyFileHandle : NSFileHandle { 
    //... 
    [CompilerGenerated] 
    [DesignatedInitializer] 
    [EditorBrowsable (EditorBrowsableState.Advanced)] 
    [Export ("initWithCoder:")] 
    public MyFileHandle (NSCoder coder) : base (NSObjectFlag.Empty) 
    { 
     //... 
    } 

    [Export ("initWithCoder:")] 
    [DesignatedInitializer] 
    [CompilerGenerated] 
    public MyFileHandle (NSCoder coder) 
     : base (NSObjectFlag.Empty) 
    { 
     //... 
    } 
    //... 
} 

どのようにすることができますバインディングライブラリがコンストラクタを2回生成するのを防ぐので、エラーを取り除くことができますか?

+2

'ApiDefinitions.cs'から削除するだけで、自動的に生成された' .g.cs'には 'CompilerGenerated'バージョンが1つしかありません。 – SushiHangover

+0

シャープリーとバインディングライブラリコードジェネレータの間に不一致があるようです。したがって、ジェネレータはコードを最初に調べ、すでにサブクラスにある場合はベースクラスのコンストラクタ作成を省略するか、指定された初期化子のコンストラクタを生成しないようにしてください。 – awattar

答えて

0

@SushiHangoverが示唆するように、重複したコンストラクタをApiDefinitions.csから単に削除することができます。

関連する問題