본문 바로가기

연구실/Microsoft Visual Studio Tip

Add/Remove operation is impossible, because the code element (null) is read only 버그

Purpose-built post

이 포스트는 비쥬얼 스튜디오 2005/2008 을 사용 하는 중 발생 하는 버그를 우회시키는 방법을 알리고자 만들었다. 나는 이 버그로 인해 자그마치 2시간 동안 ... - 익필

Content

이 버그는 비쥬얼 스튜디오 2005/2008에서 MFC로 다이얼로그에 이벤트를 추가할 때, 자동으로 코드가 생성되지 않는 버그 이다. 이때 다음과 같은 에러 메시지가 팝업 메세지로 뜬다.

Add/Remove operation is impossible, because the code element (null) is read only

꼭 자동 코드 생성을 사용하지 않고, 수동으로 하여도 되지만, 불편하다. 그러므로 우회 하는 방법 4가지를 정리 한다.

1. 우회 방법 1

먼저 비쥬얼 스튜디오에서 솔루션을 종료 했다가. 다시 켜 본다.

2. 우회 방법 2

방법 1도 안될 경우, 솔루션을 킨 상태에서, 각 모드별(디버그 릴리즈 등등)로 "솔루션 비우기"를 실행한다. 그런 후 솔루션을 닫고, VC++ Intellisence Database 파일인 ncb 파일, Visual Studio Solution User Options 파일인 suo 파일, Visual Studio Project User Options file인 vcproj.(username).user 파일 삭제 한다. 그런후 다시 솔루션을 키고 해본다.

3. 우회 방법 3

방법 2이 안될 경우, 해당 솔루션 폴더 체로 "읽기 속성"을 없앤다.

4. 우회 방법 4

방법 3이 안될 경우, 해당 다이얼로그 cpp에 추가되지 않은 이벤트가 매세지 맵에 들어 있나 살펴 본다. 예를 들어서 WM_CREATE 이벤트가 만들어지지 않는다면, 해당 다이얼로그.cpp 중 BEGIN_MESSAGE_MAP( ...., ...) ~ END_MESSAGE_MAP() 에 ON_WM_CREATE() 가 있을 경우, 삭제 하고, 다시 해 본다.

이 1 ~ 4 까지의 방법으로도 해결이 안된다면, 마이크로 소프트에 연락하여, 피드백 받는 수 밖에 없을 것이다. : )

Digression

  • 나 같은 경우, 우회방법 2와 우회방법 4가 동시에 발생 되어서, 증상 파악조차 안되었다.

  • 비쥬얼 스튜디오 2008을 사용 중 서명없는 UTF-8 로 파일을 구성했을 때, 컴파일을 하면, C4819 오류가 뜨는 것이다. 이 사실을 "한글"로 마이크로 소프트에 알렸다. 그때 받은 답변은, "We would greatly appreciate it if you could submit this issue again in english." 였다.