컴퓨터/C#

[Error] '{0}' 어셈블리의 '{1}' 형식이 serializable로 표시되어 있지 않습니다.

호마 2015. 11. 17. 15:04


에러 발생 화면, '해결2)'로 문제를 해결하였다.



에러 문구


KOR - 오류:'{0}, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' 어셈블리의 '{1}' 형식이 serializable로 표시되어 있지 않습니다.


ENG - Error:Type '{1}' in Assembly '{0}, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable. 



문제 분석


문제1. 에러 발생 위치가 작성한 (코드 수정 가능한) 코드일 때 해결1),    

         에러 발생 시점이 디버깅 중이거나, 프로그램이 실행 중일 때 해결1),

문제2. 에러 발생 위치가 라이브러리일 때. 해결2),

         에러 발생 시점이 빌드 시 일 때, 해결2), 빌드 시 발생하는 에러는 'Visual Studio 디자이너' 에러를 의미한다.




해결 방법


1) 문제가 발생하는 클래스나 메소드(위 그림에서 '~View'에 해당)에 [Serializable] 속성을 달아준다. 

   구글링 하면 가장 많이 나오는 해결 방법이다. 아래 글을 참고하였다.

    http://stackoverflow.com/questions/15707872/error-is-not-marked-as-serializable




2) 문제가 발생하는 코드 위치(위 그림에서 'CursorModeChanged~'에 해당) 에 아래와 같이 속성을 추가한다.


1
2
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public CursorModeChangedEventHandler CursorModeChangedEvent { get; set; }
cs


   위 방법으로 해결이 되지 않을 경우, 아래와 같이 다른 속성을 추가해본다.

   (아마 문제가 발생한 코드가 '클래스냐', '델리게이트냐', '무엇을 상속 받았느냐'에 따라 다른 것 같다.)


1
2
3
4
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public List<ColorData> PaletteColors { get; set; } 
cs

  아래 글을 참고하였다.

   http://stackoverflow.com/questions/4973506/failed-to-create-component-type-is-not-marked-as-serializable





- 사 족 -


에러 발생 상황 기록


'CursorMode~Event'를 가진 컨트롤(.dll 어셈블리)에 디자이너 파일(.Designer.cs)이 없었다...

프로젝트에 컨트롤 라이브러리를 참조 추가하고, 폼에 수동으로 컨트롤 객체를 추가하였다. 문제2)가 발생하였다. (151117)