0

いくつかのクラスを持つdllを作成しました。それらの1つはDataDesignと呼ばれます。

[Serilizible]
public class DataDesign
    {
        [NonSerialized]
        HorizantalFields _horizantalFields;
        [NonSerialized]
        VerticalFields _verticalFields;
        [NonSerialized]
        GeneralDataDesignViewType _dataDesignView;
        [NonSerialized]
        Dictionary<FieldTemplateType, string> _templateTable;
        [NonSerialized]
        public List<string> ProcessedData;

        List<IField> _fields; 
    }

アプリケーションでこのdllを使用すると、脱滅菌プロセスに問題が発生します。セリライジングは成功することになります。しかし、逆シリアル化では例外があります。

例外は

「アセンブリが見つかりません'AnalyzingData、Version = 1.0.0.0、Culture = neutral、PublicKeyToken=null'。」

AnalyzingDataはdllの名前です。

DeSerilizeClass()
{
                    BinaryFormatter bin = new BinaryFormatter();
                    dataDesign=new DataDesign();

                    DataDesign dd= (DataDesign)bin.Deserialize(stream);
}

Serilize()
{
                    using (FileStream sr = new FileStream(String.Format(@"{0}\{1}", Parameters.SavedConfigurationsDirectory, dataDesignName),FileMode.CreateNew, FileAccess.Write))
                    {
                        BinaryFormatter bin = new BinaryFormatter();
                        bin.Serialize(sr, this);
                    }
}

//このデータデザインクラス

どうすればこの問題を解決できますか?

MSVisualStudio2010。Windows 7ご清聴ありがとうございました!

4

2 に答える 2

2

逆シリアル化するプロセスは、AnalyzingData Dll にアクセスできる必要があります。つまり、そのアプリの bin フォルダーまたはそれをロードできる他の場所に存在する必要があります。

于 2012-10-08T07:46:10.713 に答える
1

BinaryFormatterグラフ内の具体的なオブジェクトをシリアル化します。として何かを公開してもIFieldBinaryFormatter実際のSomeTypeOfField : IFieldインスタンスを見ているだけです。つまり、このデータを逆シリアル化するには、データをシリアル化したときに使用されていたアセンブリが必要です。シリアル化したときに、AnalyzingDataアセンブリから (グラフ内の) いくつかの型を取得していたようです。これは、このデータを逆シリアル化するには、このアセンブリが再び必要になることを意味します。

でこれを回避するには複雑な方法がいくつかありますBinderが、ほとんどの場合、シナリオに対応するシリアライザーを選択することをお勧めします。同じ元の型/アセンブリなしで逆シリアル化したい場合は、契約ベースのシリアライザーを使用する必要があります。

または、単に を見つけAnalyzingData.dllて参照を追加し、それがアプリケーションとともにデプロイされるようにします (copy-local も true に設定します)。

于 2012-10-08T07:46:23.853 に答える