Unity3d(モノタッチ) エンジン (C#) を使用してクロスプラットフォームのオンライン ゲームを開発しており、protobuf-net (Marc Gravell 氏に感謝) をプロトコルとして使用しています。ご存知のように、リフレクションは iOS では機能しません。コードを動的に生成することは Apple によって許可されていません。Marc のブログ (http://marcgravell.blogspot.com/) を確認したところ、初期の protobuf-net v2 (まだ完成していませんが) がリフレクションの問題を回避できる可能性があることがわかりました。
いくつかのテストを行い、シリアル化コードを dll ファイルにプリコンパイルしようとしましたが、ios で実行すると、次のメッセージが表示されました。
>
System.IO.FileNotFoundException has been thrown
> “Could not load file or assembly “DataBuilder , Version=0.0.0.0 ,
> Culture = neutrual , PublicKeyToken =
> null ”” or one of its dependencies.”
ここに私たちのコンパイルdllコードがあります
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProtoBuf;
using ProtoBuf.Meta;
using Data;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var bb = TypeModel.Create();
bb.Add(typeof(Customer), true);
bb.Compile("DataBuilder", "databuilder.dll");
}
}
}
ここに私たちのテストコードがあります
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Data;
using System.IO;
using ProtoBuf;
using ProtoBuf.Meta;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var creater = new DataBuilder(); // that's it
var dd = new Data.Customer();
dd.Name = "Hellow World";
dd.CustomerId = "1232";
MemoryStream mm = new MemoryStream();
creater.Serialize(mm, dd);
mm.Seek(0, SeekOrigin.Begin);
Data.Customer c = (Data.Customer)creater.Deserialize(mm, null, typeof(Data.Customer));
Console.WriteLine(c.Name);
}
}
}
Windows環境(compact Framework .net 3.5)でdllをコンパイルしましたが、モノタッチでは動かなかったのかもしれません。