4

私はMonotouchを使用しており、プロジェクト全体でDebugビルドを使用しています。最近、ビルドをリリースして実行するように変更しましたが、起動時にクラッシュしました。デバッグシンボルをオンにすると、問題はSQLiteが(偽の?)例外をスローしていることがわかりました:「RealConfigDataを更新できません。PKがありません!」

public class RealConfigData
{
    [AutoIncrement, PrimaryKey]
    public int Id { get; set; }
    // .. Other fields
}

public class GameData
{
    [AutoIncrement, PrimaryKey]
    public int Id { get; set; }

    public int Seed {get;set;}
    // .. Other fields
}

RealConfigDataにPKがないデータベースの最初の.Insert()を実行しようとすると、エラーが発生します。それでも、そうです。

そして2つ目では、「「シード」のGetメソッドが見つかりません」というメッセージが表示されます。

WTF、RELEASEをコンパイルすると、メタデータが存在しないか、より正確には信頼できないようです... 2番目のクラスのPKは問題なく検出されたようですが、最初のクラスではできませんでした。そして、フィールドのゲッターを見つけることができませんでした...これはクレイジーです。

そして、このコードは、デバッグを実行するときに問題なく機能します。

いったい何がここで間違っている可能性がありますか?

土壇場でSQLiteがダウンすることを除いて、iPhoneアプリをリリースする準備ができています。ヘルプ!

====これは虚偽表示でした:

更新:サブクラスを持たない他のクラスは正しく機能します!つまり、それは親子関係と関係があります。

これは真実ではありません、例外はそのクラスのために食べられていました。

4

1 に答える 1

3

理解した...

これが見つかりました: http: //forums.xamarin.com/discussion/276/reflection-on-type-in​​-dll-allways-returns-propertyinfo-canwritefalse

基本的に、プロパティのリフレクションを機能させる場合は、iOSビルド設定で[すべてのアセンブリをリンク]をオフにします。(それ以外の場合は、すべてのセッターが削除されます)

これは、私がそれに遭遇していなかったかどうかを理解するのに何年もかかったかもしれません... :-(

于 2013-03-27T23:09:14.760 に答える