본문 바로가기

Programming/C#

asp.net : 이름이 현재 컨텍스트에 없습니다. (백업파일 등에서 발생하는 모호성??)

C#을 다룬지 얼마 안되었습니다.

내공이 깊은 고수님들의 코멘트는 늘 환영입니다 :)


보통 view layer의 ascx나 aspx 파일에서 참조하려는 cs 파일의 name space 를 잘못정의한 경우에

위와 같은 오류메시지를 접하게 됩니다.

관련해서는 구글링하면 줄줄 나와요 :)


다만 저같은 경우엔 조금 다른 경우인데요, 모호성(?)에 기인한 경우입니다.

컨트롤러(ascx) 작업을 하다가 백업을 하기 위해 백업파일을 백업대상 파일과 같은 path에 저장해두었습니다.

이때 백업대상에 없는 각종 server에서 실행되는 웹컨트롤들이 현재 컨텍스트에 없다며 오류가 나더군요.


이렇게도 저렇게도 하면서 저 오류를 해결하지 못하고 있었는데,

name space 를 잘못 정의해주었다는 부분에서 힌트를 얻었습니다.

visual studio 의 솔루션탐색기에서 일반적으로 보여지기를 ascx(aspx 등)파일과 cs 파일이 함께 묶여 있기때문에

cs파일이 바라보는 ascx 파일은 탐색기에 함께 묶여있는 ascx 파일이라고 직관적으로 이해하고 작업합니다.

즉 저와 같이 하나의 프로젝트에서 백업파일을 백업대상 파일과 같은 path에 두어도 문제가 없습니다.

그리고 문제될 것이 없구요.

작업시, 즉, 컴파일 타임에는 관계에 대해 모호하지 않기 때문이죠.


하지만 빌드타임에선 달라집니다.

빌드시에는 각 cs파일이 하나의 객체가 되어

그 cs 파일을 네임스페이스로 기술해놓은 각종 ascx파일과 묶이게 됩니다.

이때, 저 처럼 백업해놓은 파일과 그 대상이 같은 ascx파일이 같은 path에 놓여있고 둘 모두 같은 cs파일을

참조할 때에 cs가 접근하려는 컨트롤이 백업대상과 백업해놓은 파일에 서로 다르게 ID가 정의 되어 있거나

없다면 빌드오류가 발생하게 됩니다.

어쨌거나 cs 파일은 그 cs파일을 가져다 쓰는 컨트롤러들에(ascx, aspx 등) 있는 각종 웹컨트롤들을

이해해야하기 때문이죠.


적고보니 좀 애매한데요,

그냥 작업하실 때에 백업하려는 파일을 백업대상과 동일한 path에 두지 않으면 됩니다.

그러고 싶지 않다면 cs파일을 정의한 컨트롤러의(aspx, ascx 등) name space를 지워버리시던가 해야겠죠.




'Programming > C#' 카테고리의 다른 글

.net의 webform controller 와 jquery mobile 조합은 최악.  (0) 2013.06.26