2012-10-08 8 views
0

여러 클래스가있는 dll을 작성했습니다. 그 중 하나가 DataDesign입니다.deserialize 프로세스에서 예외가 발생했습니다.

[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을 사용할 때 프로세스를 deserilizing하는 데 문제가 있습니다. Serilizing는 성공으로 끝납니다. 그러나 deserialization에서 예외가 있습니다.

예외는 " 'AnalyzingData = 1.0.0.0, 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); 
        } 
} 

// 나는이 문제를 해결할 수있는 방법

이 datadesign 클래스?

MS visual Studio2010. Windows 7 관심을 가져 주셔서 감사합니다!

+0

오류 메시지의 어느 부분이 충분하지 않습니까? – Jon

+0

'Version = 1.0.0.0'은 일반적인 전화 끊기입니다. 현재 AnalyzingData.dll의 [AssemblyVersion]은 무엇입니까? Fuslogvw.exe를 사용하여 문제를 해결하십시오. –

답변

2

deserialize하는 모든 프로세스는 AnalyzingData Dll에 액세스해야합니다. 즉, 해당 응용 프로그램의 bin 폴더 또는로드 할 수있는 다른 위치에 있어야합니다.

+0

도움을 주셔서 감사합니다. –

+0

도움이되기를 기뻐합니다. –

1

BinaryFormatter콘크리트 개체를 그래프로 직렬화합니다. IField으로 정보를 공개하더라도 BinaryFormatter은 실제 SomeTypeOfField : IField 인스턴스 만보고 있습니다. 즉,이 데이터를 deserialize하려면 데이터를 serialize 할 때 사용중인 어셈블리가 필요합니다. 당신이 연재했을 때처럼, 그것은 AnalyzingData 어셈블리에서 (그래픽에서) 몇 가지 유형을 얻고있는 것처럼 들립니다. 즉 의 데이터를 비 직렬화하면이 어셈블리가 다시 필요할 것입니다.

Binder과 함께이 문제를 해결하는 몇 가지 복잡한 방법이 있지만 대부분의 경우 시나리오에 매핑되는 serializer를 선택하는 것이 좋습니다. 동일한 원본 유형/어셈블리없이 deserialize하려는 경우에는 계약 기반 시리얼 라이저.

또는 AnalyzingData.dll을 찾고 해당 응용 프로그램과 함께 배포되도록 참조를 추가하십시오 (copy-local도 true로 설정).

+0

정확하게이 예외를 제거해야합니까? –

관련 문제