타사 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)
{
//...
}
//...
}
어떻게 내가 할 수있는 바인딩 라이브러리가 생성자를 두 번 생성하지 못하도록하여 오류를 없앱니까?
'ApiDefinitions.cs' 파일 중 하나만 삭제하면 자동으로 생성 된'.g.cs' 파일에'CompilerGenerated' 버전이 하나만 있습니다. – SushiHangover
sharpie와 바인딩 라이브러리 코드 생성기 사이의 불일치 인 것 같습니다. 따라서 생성자는 먼저 코드를 살펴보고 하위 클래스에 이미있는 경우 기본 클래스의 생성자 생성을 생략하거나 sharpie가 지정된 초기화 프로그램의 생성자를 생성하지 않아야합니다. – awattar