0

타사 SDK 코드의 sharpie 도구로 생성 된 코드가있는 Xamarin iOS 바인딩 라이브러리에 복제 된 생성자와 관련된 문제가 있습니다. 기본적으로 C# 생성 된 인터페이스는 기본 형식으로 NSFileHandle을 사용하고 있으며 SDK 헤더 파일은 NSFileHandler와 같은 하위 클래스에서 동일한 지정된 이니셜 라이저를 선언하므로 이제 바인딩 라이브러리는 C# 생성자를 두 번 생성하기 때문에 "Member ... already defined error" 처음에는 기본 클래스에서, 두 번째는 하위 클래스 이니셜 라이저에서 가져 왔습니다.Xamarin iOS 바인딩 라이브러리 중복 생성자 문제

목표 - 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

'ApiDefinitions.cs' 파일 중 하나만 삭제하면 자동으로 생성 된'.g.cs' 파일에'CompilerGenerated' 버전이 하나만 있습니다. – SushiHangover

+0

sharpie와 바인딩 라이브러리 코드 생성기 사이의 불일치 인 것 같습니다. 따라서 생성자는 먼저 코드를 살펴보고 하위 클래스에 이미있는 경우 기본 클래스의 생성자 생성을 생략하거나 sharpie가 지정된 초기화 프로그램의 생성자를 생성하지 않아야합니다. – awattar

답변

0

@SushiHangover 제안대로 ApiDefinitions.cs에서 복제 된 생성자를 간단하게 제거 할 수 있습니다.

관련 문제