Я только получил его для работы на симуляторе.Я создал сборку настраиваемой сериализации в VS.NET 2010. У меня была проблема с тем, что создаваемый IL / DLL имел неправильное пространство имен.Я сделал что-то вроде этого:
model.Compile("X.Y.Serializer.MySerializer", "X.Y.Serializer.dll")
Но IL был что-то вроде:
.assembly X.Y.Serializer.MySerializer
{
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module X.Y.Serializer.MySerializer
Т.е. имя класса было в имени сборки.
Итак, я написалPerl-программа для:
- Декомпиляция DLL -> IL
- Исправление IL
- Компиляция IL -> DLL
Вотscript:
#!/usr/bin/perl
# Usage: fix-protobuf-assembly assembly bad-namespace
#
# Example: fix-protobuf-assembly X.Y.Serializer.dll X.Y.Serializer.MySerializer
# X.Y.Serializer.MySerializer gets converted to X.Y.Serializer
use strict;
use File::Slurp;
use Cwd;
print "Current directory is " . getcwd() . "\n";
my $asm_file = shift || die "missing assembly file";
my $bad_ns = shift || die "missing namespace";
die "no such file '$asm_file'" if (! -f $asm_file);
my $il_file = $asm_file;
$il_file =~ s#dll$#il#;
Run("ildasm /out=$il_file $asm_file");
my $il = read_file($il_file) || die "error reading $il_file: $!";
my $ns = $bad_ns;
$ns =~ s#\.[^.]+$##;
if (($il =~ s#(\.assembly|module) $bad_ns#$1 $ns#g) == 0)
{
die "$bad_ns not found in input dll; aborting";
}
write_file($il_file, $il);
Run("ilasm /dll $il_file");
sub Run
{
my($command) = @_;
warn "Running $command ...\n";
system($command) && die "error running last command; bailing out";
}
Возможно, я просто пропустил правильный способ вызова Compile (), и мой хак не нужен.
Сборка отлично работала на симуляторе Windows и iOS.Но затем он выдал ошибку нарушения JIT во время выполнения на устройстве.Я только что создал вопрос SO:
Ошибка компиляции JIT с protobuf-net на устройстве MonoTouch / iOS (iPhone / iPad)
Я пытался использовать MonoDevelop на Mac w/ стандартный консольный проект, чтобы сначала создать сборку сериализации.У меня были некоторые проблемы, но, честно говоря, я был сонным и раздражительным, и это могло быть ошибкой пользователя, и я быстро решил перейти на Windows, поскольку в моем проекте есть другие компоненты, которые я там разрабатывал.
Я использовал.Проекты NET 4.0 на Windows и все работало нормально.Мне просто нужно было создать облегченную версию двух библиотек только для MT, чтобы я мог получить доступ к классам, которые будут сериализованы.