0

アプリケーション用のプラグイン dll を作成しています。アプリケーションは、次の方法でプラグイン アセンブリを読み込みます。

assembly = Assembly.Load(System.IO.File.ReadAllBytes(filename)); 

public クラスをシリアライズ/デシリアライズしようとすると、問題が発生します。次の連載に絞り込みました。

public BindingList<MyClass> MyClasses
    { get; set; }

これをコメントアウトしても問題ありません。私がシリアライズしようとすると:

        public static void SaveSettingsFile()
        {
            try
            {
                XmlSerializer ser = new XmlSerializer(typeof(GameTimeSettings));

                TextWriter writer = new StreamWriter(SettingPath);
                ser.Serialize(writer, Settings.Instance);
                writer.Close();
            }
            catch (Exception e)
            {
                Logger.ReportException("SaveSettingsFile", e);
                Logger.ReportException("SaveSettingsFile->InnerException", e.InnerException);
            }
        }

ser.Serialize(writer, Settings.Instance) で例外がスローされます。

System.InvalidOperationException Msg=There is an error in XML document (0,, 0). ->
InnerException: Object reference not set to an instance of an object.

私のクラスには、デフォルトの空のコンストラクターがあります。私はsgenを使ってみました。私が書いた単純なテストベッド アプリケーションでは、シリアライゼーションは正常に動作します...アセンブリが動的にロードされた場合にのみエラーが発生します。

さらに、この2つのスレッドから、

http://forums.gbpvr.com/showthread.php?30384-XMLSerializer-Problems-with-Pluginshttp://forums.gbpvr.com/showthread.php?32197-System.XML-Deserialization

タイプを BindingList から ArrayList に変更して動作させることができることはわかっています。ただし、管理する設定がかなりあるため、データバインディングを引き続き機能させたいと考えています。

任意の入力をいただければ幸いです。

4

2 に答える 2

0

John Saunders のコメントは、これまでのところ正しいようです。おそらく初期化していませんMyClasses

SGen で問題なく動作するとおっしゃっているので、コンパイル フラグと関係があるかどうかを確認することもできます。たとえば、リリースに設定してみて、状況が変わるかどうかを確認してください。

于 2010-07-01T19:57:41.803 に答える