이 웹 응용 프로그램 프로젝트는 기존의 ASP.NET 1.1방식을 따릅니다.
즉, 빌드를 하면 obj폴더가 생성되고 이 안에 debug폴더나 release폴더가 생성되고, bin폴더에 컴파일된 dll이 생성됩니다.
웹 사이트에서는 obj,debug,release폴더가 생성되지 않습니다. 또 빌드를 해도 bin폴더에 dll을 생성하지 않고 단지 소스의 에러 체크 정도만 확인하는 수준에서 끝납니다. bin폴더에 dll이 추가되는 경우는 다른 dll을 참조할 때 입니다.
또 다른 차이점은 웹사이트는 aspx웹페이지 파일들이 요청될 때 동적으로 컴파일된다는 겁니다.(미리 컴파일이라는 것이 있는데 일단 여기서는 제외합니다.)
개별 파일의 동적 컴파일은 다른 웹페이지의 클래스를 참조할 수 없습니다.
예들 들어, WebForm1.aspx의 클래스는 WebForm1, WebForm2.aspx의 클래스는 WebForm2라고 했을 때 WebForm1 클래스에서 다음과 같이 WebForm2의 인스턴스를 만들 수 없습니다.
(* 이것과 관련된 대표적인 또 다른 예는 클래스 뷰 창에서 aspx 페이지에 대한 클래스가 나오지 않는다는 겁니다.
그러나 App_Code폴더에서 클래스 파일을 만들면 클래스 뷰 창에서 클래스을 볼 수 있습니다. App_Code 폴더의 클래스들은 내부적으로 미리 자동 컴파일되기 때문입니다.)
WebForm2 wf=new WebForm2();//웹 사이트에서는 이게 안됨
실행하면 당장 WebForm2을 찾을 수 없다는 메시지가 나올 겁니다.
그러나 웹 응용 프로그램에서는 이게 됩니다.
아마도 동적 컴파일이 아니고 먼저 완전히 컴파일이 된 후에 실행된다는 전제 때문에 다른 웹페이지(클래스)를 참조할 수 있도록 허용한 것 같습니다.
웹 응용 프로그램의 이 관계는 aspx와 ascx에서도 허용이 됩니다.
예를 들어 자식컨트롤 ascx에서 WebForm1의 public void TestFun()이라는 함수를 접근하고자 할 때는 다음과 같이 할 수 있습니다.
WebForm1 wf = (WebForm1)this.Parent.Parent;
wf.TestFun();
*
Visual Studio 2005 서비스 팩 1 (SP1)은 아래주소에서 다운로드할 수 있습니다.
http://www.microsoft.com/korea/msdn/vstudio/support/vs2005sp1/default.aspx
좋은정보가 되셨다면 아래 한번 클릭해주세요^^ |
댓글