0
我們在使用Visual Studio包裝本地obj-c庫時出現問題。 Build在NativeLibraryWrapperDef.cs中爲我們的類生成代碼隱藏,但命名空間存在一些問題:Xamarin'GetNSObject'不存在於命名空間'Internal.Runtime'中
錯誤CS0234:名稱空間'Internal.Runtime'中不存在類型或名稱空間名稱'GetNSObject'缺少裝配參考?)(CS0234)(Gmc.Mobile.Sdk.iOS)
使用Xamarin工作室的同事可以很好地構建它。其他人遇到這個問題?
using System;
using UIKit;
using Foundation;
using ObjCRuntime;
using Gmc.Mobile.Sdk;
using SafariServices;
namespace Internal.iOS
{
/*
The first step to creating a binding is to add your native library ("libNativeLibrary.a")
to the project by right-clicking (or Control-clicking) the folder containing this source
file and clicking "Add files..." and then simply select the native library (or libraries)
that you want to bind.
When you do that, you'll notice that MonoDevelop generates a code-behind file for each
native library which will contain a [LinkWith] attribute. MonoDevelop auto-detects the
architectures that the native library supports and fills in that information for you,
however, it cannot auto-detect any Frameworks or other system libraries that the
native library may depend on, so you'll need to fill in that information yourself.
Once you've done that, you're ready to move on to binding the API...
Here is where you'd define your API definition for the native Objective-C library.
For example, to bind the following Objective-C class:
@interface Widget : NSObject {
}
The C# binding would look like this:
[BaseType (typeof (NSObject))]
interface Widget {
}
To bind Objective-C properties, such as:
@property (nonatomic, readwrite, assign) CGPoint center;
You would add a property definition in the C# interface like so:
[Export ("center")]
CGPoint Center { get; set; }
To bind an Objective-C method, such as:
-(void) doSomething:(NSObject *)object atIndex:(NSInteger)index;
You would add a method definition to the C# interface like so:
[Export ("doSomething:atIndex:")]
void DoSomething (NSObject object, int index);
Objective-C "constructors" such as:
-(id)initWithElmo:(ElmoMuppet *)elmo;
Can be bound as:
[Export ("initWithElmo:")]
IntPtr Constructor (ElmoMuppet elmo);
For more information, see http://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/
*/
// @interface MRDCState : NSObject <MRDBObject>
[BaseType(typeof(NSObject))]
interface MRDCState : MRDBObject
{
[Export ("remoteId", ArgumentSemantic.Copy)]
string RemoteId { get; set; }
[Export("documentID", ArgumentSemantic.Copy)]
string DocumentID { get; set; }
[Export("displayName", ArgumentSemantic.Copy)]
string DisplayName { get; set; }
[Export ("isUpdateAvailable", ArgumentSemantic.Copy)]
bool IsUpdateAvailable { get; set;}
[Export("lastUpdateDate", ArgumentSemantic.Copy)]
NSDate LastUpdateDate { get; set; }
[Export("content", ArgumentSemantic.Copy)]
string Content { get; set; }
//@property (nonatomic) int stateTypeFlag;
[Export ("stateTypeFlag", ArgumentSemantic.Copy)]
StateType TypeFlag { get; set; }
}
// @interface MRDCAppMessage : NSObject
[Protocol]
[BaseType(typeof(NSObject))]
interface MRAppMessage
{
// @property NSUInteger messageID;
[Export("messageID")]
ulong MessageID { get; set; }
// @property NSString *documentID;
[Export("documentID")]
string DocumentID { get; set; }
// @property NSString *messageType;
[Export("messageType")]
string MessageType { get; set; }
// @property NSString *payload;
[Export("payload")]
string Payload { get; set; }
// - (instancetype)initWithID:(NSUInteger)messageID documentID:(NSString *)documentID type:(NSString *)messageType payload:(NSString *)payload;
[Export("initWithID:documentID:messageType:payload:")]
IntPtr Constructor(ulong messageID, string documentID, string messageType, string payload);
}
它在'ObjCRuntime'命名空間中:'ObjCRuntime.Runtime.GetNSObject()',你可以添加一個你的'NativeLibraryWrapperDef.cs'的樣本... – SushiHangover
我添加了部分文件來提問。我試圖從Internal.iOS命名空間中刪除Internal。現在庫編譯的包裝很好。我不確定內部命名空間是從哪裏來的。 (當我嘗試在應用程序中使用它時,新的包裝器.dll有一些問題,但可能由其他原因引起) –