ASP.NET 1.0을 ASP.NET 2.0으로 업그레이드할 때 발생하는 여러 문제 요약
저자:Eve Cole
업데이트 시간:2009-06-30 16:06:42
나는 지난 며칠 동안 원래의 1.1 프로젝트를 업그레이드했고 몇 가지 문제를 발견했습니다. 여기에 요약하고 업그레이드할 시간이 없거나 업그레이드할 준비가 되어 있는 친구들에게 업그레이드 과정에서 우회와 시간 낭비를 피하기 위해 상기시켜 드리겠습니다.
1. Global.asax 파일의 처리 형태가 다르며, 변환 후 오류가 발생합니다. vs2003에서는 Global.asax 2.0 미만에서는 코드 분리 파일이 App_Code 디렉터리로 이동되어 자동으로 생성됩니다. 응용 프로그램을 통해 사용할 수 있습니다. 프로그램의 모든 ASP.NET 페이지에 액세스합니다. "Code-behind" 특성은 ASAX 파일의 지시문에서 제거됩니다. vs2005는 Global.asax에 직접 코드를 작성합니다. 따라서 변환된 파일을 삭제하고 다시 추가한 후 해당 코드를 복사해야 합니다.
2.2.0에는 프로젝트 파일이 없습니다. 1.1 애플리케이션에서 프로젝트 파일에는 빌드 설정, 외부 어셈블리에 대한 참조 및 프로젝트의 파일 목록이 포함됩니다. 2.0 응용 프로그램에서는 웹 프로젝트 디렉터리의 모든 파일이 웹 프로젝트의 일부로 간주되므로 버전 설정과 파일 목록이 더 이상 필요하지 않습니다.
3. 코드 분리 모드.
ASP.NET 1.1에서 코드 분리 모드는 코드(예: test.aspx.cs)에서 콘텐츠(예: test.aspx)를 분리합니다. 콘텐츠 페이지는 사용자 및 디자이너가 생성한 코드가 포함된 코드로 구분된 페이지에서 상속됩니다.
ASP.NET 2.0은 부분 클래스 사용을 통해 코드 분리 모드를 향상시켰습니다. 즉, 부분 키워드를 사용하여 단일 클래스의 코드를 두 개의 별도 파일로 분리합니다. 클래스가 여러 파일에 걸쳐 있을 수 있도록 합니다. 새로운 코드 분리 모드에서 콘텐츠 페이지는 해당 코드 분리 페이지와 콘텐츠 페이지에 사용되는 컨트롤에 대한 필드 선언을 정의하는 자동 생성된 스텁 파일로 구성된 컴파일된 클래스에서 상속됩니다. 이러한 변경으로 인해 자동으로 생성된 코드가 사용자 코드에서 분리되어 코드 분리 페이지가 훨씬 더 작고 깔끔해졌습니다. 부분 클래스 구조는 디자이너가 생성한 코드를 편집하여 실수로 페이지가 손상될 위험도 줄여줍니다.
오류가 발생하면 부분 키워드가 있는지 확인하고, 없으면 부분 키워드를 추가하세요.
4. 문법 검사. asp.net1.1 프로그램은 컴파일 시 aspx, aspcx 및 기타 파일의 구문 오류를 검사하지 않는 반면, vs2005는 컴파일 시 프로젝트의 모든 aspx, aspcx 및 기타 파일의 구문 오류를 검사하므로 구문 오류가 있는 경우 컴파일이 실패하게 됩니다.
5. 제어 선언. 모든 컨트롤이 .aspx 페이지에 선언된 경우 코드 분리 파일에서 모든 컨트롤 선언을 삭제하세요. 그렇지 않으면 중복된 정의라는 오류가 보고됩니다.
6. (C#만 해당) 코드 분할 파일의 InitialzeComponent 함수에서 이벤트 후킹 코드를 .aspx 페이지로 이동합니다. 이 작업은 Page_Init, Page_Load, Page_DataBind, Page_PreRender, Page_Unload, Page_Error, Page_AbortTransaction 및 Page_CommitTransaction을 포함하여 자동으로 호출되는 이벤트에는 적용되지 않습니다.
7. 배포 방법(미리 컴파일된, 전체 컴파일된, 업데이트 가능한 사이트 등) 1.x에서는 웹 애플리케이션이 하나의 대규모 어셈블리로 미리 컴파일되어 배포되었습니다. 콘텐츠 페이지(*.aspx)는 서버에서 컴파일되지 않지만 서버에서 편집할 수 있습니다. 새로운 페이지 컴파일 모드와 디렉터리 구조를 통해 다양한 구성을 사용하여 ASP.NET 2.0 응용 프로그램을 배포할 수 있습니다. 어떤 경우에는 모든 ASPX 페이지를 미리 컴파일하고 완전히 컴파일된 어셈블리로 구성된 웹 응용 프로그램을 배포할 수 있습니다. 이 모드에서는 서버의 애플리케이션을 쉽게 변경할 수 없습니다. 또는 코드를 미리 컴파일하지 않고 애플리케이션을 배포할 수 있습니다. 이 구성에서는 서버에서 직접 애플리케이션의 .aspx 페이지, 코드 분리 파일 또는 기타 코드를 변경할 수 있습니다. 사용자가 서버에서 페이지를 요청하면 페이지가 동적으로 컴파일됩니다.
8. .aspx 페이지의 모든 CodeBehind 속성을 CodeFile 속성으로 변경합니다.
CodeBehind: 페이지와 연결된 클래스가 포함된 컴파일된 파일의 이름을 지정합니다. 이 속성은 런타임에 사용할 수 없습니다.
이 속성은 코드 숨김 기능을 구현하기 위해 이전 버전의 ASP.NET과의 호환성을 위해 제공됩니다. ASP.NET 버전 2.0에서는 대신 CodeFile 속성을 사용하여 소스 파일의 이름을 지정하고 Inherits 속성을 사용하여 클래스의 정규화된 이름을 지정해야 합니다.
코드파일
페이지에서 참조하는 코드 숨김 파일의 경로를 지정합니다. 이 속성은 Inherits 속성과 함께 사용되어 코드 숨김 소스 파일을 웹 페이지와 연결합니다. 이 속성은 컴파일된 페이지에만 유효합니다.
9. 모든 독립 코드 파일과 AssemblyInfo.cs를 App_Code 디렉터리로 이동합니다.
그러나 변환 마법사를 실행한 후 일부 코드 분리 파일(예: *.aspx.cs 또는 *.ascx.vb)이 App_Code 디렉터리로 이동된 것을 확인할 수 있습니다. 이는 코드 분할 파일의 콘텐츠 페이지에 잘못된 Codebehind 지시문이 포함되어 있고 올바르게 설정되지 않았음을 나타냅니다. 즉, 변환 마법사는 코드 분할 파일이 실제로 특정 .aspx 페이지에 바인딩되어 있는지 여부를 확인할 수 없습니다.
10. 웹 서비스 ASP.NET 1.x에서 웹 서비스(.asmx)는 자동으로 빈 헤더 페이지(.asmx)와 실제 메서드가 포함된 코드로 구분된 파일로 분할됩니다.
Asp.net2.0에서:
• 응용 프로그램의 모든 ASP.NET 페이지에서 자동으로 액세스할 수 있도록 코드 분리 클래스를 App_Code 디렉터리로 이동합니다.
• .asmx 파일의 CodeBehind 속성을 변경하여 새 위치를 가리키도록 합니다.
(코드로 구분된 파일은 로컬 클래스를 사용하지 않으므로 CodeBehind 특성이 계속 사용됩니다.)
• 모든 기본, Friend 및 내부 범위 선언을 공개로 변경합니다.
1.1에서 2.0으로 업그레이드하는 과정에서 어떤 문제가 발생했나요? 모두가 함께 학습하고 우회를 피할 수 있도록 적어 놓을 수 있습니다.