1. 문제 소개 VS2005 웹 사이트 개발 과정에서 웹 사이트 게시는 항상 문제였습니다. VS2005에서 만든 웹 사이트에는 App_Code, App_Data, App_Themes...라는 여러 기본 디렉터리가 있습니다.
UploadFile.cs 클래스 UploadFile과 같은 cs/vb 파일인 경우 이 클래스 파일에 표시되는 aspx 파일이 없으면 이 파일을 App_Code 디렉터리에 배치해야 합니다. 그렇지 않으면 VS2005 웹 사이트에서 이 클래스에 액세스할 수 없습니다. 그냥 넣으시는데 컴파일시 (제 VS2005가 팀버전인데 세대가 반응이 없습니다. 코드를 다시 확인하는 느낌이고, 프리컴파일은 퍼블리싱 사이트에서만 가능합니다. 다른 버전은 어떤지 모르겠네요. .) 문제가 발생합니다. 게시 웹사이트를 선택한 후 게시 방법을 선택할 수 있습니다. 일반적으로 이렇게 하면 생성된 dll 수가 적어집니다. , bin 디렉터리의 App_Code.dll. App_Web_(임의의 문자).dll, 참조된 dll 및 기타 파일. 문제는 여기에 있습니다. 가상화가 필요 없는 프로그램을 만들려면 두 개의 App_Code.dll을 bin 디렉터리에 배치해야 하는 것이 가능하지 않을까요? 갈등은 없을까? 또한, 프로그램이 한 번 변경되어 다시 게시해야 한다면 그게 전부입니다. VS2005의 좋은 점을 살펴보십시오. 상속="MyCodeGif, App_Web_vf3ukhnv"는 원래 MyCodeGif.aspx 파일과 MyCodeGif.aspx.cs 파일이었습니다. 이제 MyCodeGif.aspx 파일은 MyCodeGif, App_Web_vf3ukhnv를 상속받습니다. MyCodeGif는 MyCodeGif.aspx에 의해 정의된 클래스임을 알 수 있습니다. cs.App_Web_vf3ukhnv는 bin 폴더에 있는 dll 파일의 이름입니다. 다시 게시하려고 하면 더 귀찮은 질문이 발생합니다. 왜 MyCodeGif, App_Web_qwdwqd에서 MyCodeGif.aspx 페이지를 상속받았습니까? 컴파일된 어셈블리 이름이 다릅니다!
2. ASP.Net의 페이지와 클래스 간의 관계
ASP.Net에서는 페이지가 클래스에서 상속될 수 있으며 다중 상속이 가능합니다. 예를 들어
MyCodeGif.aspx 페이지 파일
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyCodeGif.aspx.cs" Inherits="MyCodeGif" %>MyCodeGif.aspx.cs는 다음과 같습니다.
시스템 사용;
System.Data 사용;
System.Configuration 사용;
System.Collections 사용;
System.Web 사용;
System.Web.Security 사용;
System.Web.UI 사용;
System.Web.UI.WebControls 사용;
System.Web.UI.WebControls.WebParts 사용;
System.Web.UI.HtmlControls 사용;
FreeCodeNum 사용;
공개 부분 클래스 MyCodeGif: System.Web.UI.Page
{
protected void Page_Load(개체 전송자, EventArgs e)
{
//.....논리
}
}
MyCodeGif.aspx 페이지는 MyCodeGif 클래스에서 상속되며
이런 방식으로 상속될 수도 있음
을 알 수 있습니다.
MyCodeGif.aspx 페이지 파일
<%@ 페이지 언어="C#" AutoEventWireup="true" CodeFile="MyCodeGif.aspx.cs" Inherits="MyCodeGif" %>
MyCodeGif.aspx.cs는 다음과 같습니다.
시스템 사용;
System.Data 사용;
System.Configuration 사용;
System.Collections 사용;
System.Web 사용;
System.Web.Security 사용;
System.Web.UI 사용;
System.Web.UI.WebControls 사용;
System.Web.UI.WebControls.WebParts 사용;
System.Web.UI.HtmlControls 사용;
FreeCodeNum 사용:
공개 부분 클래스 MyCodeGif: PageBase
{
protected void Page_Load(개체 전송자, EventArgs e)
{
//.....논리
}
}
PageBase.cs는 다음과 같습니다.
시스템 사용;
System.Web 사용;
System.Collections 사용
/**//// <요약>
/// PageBase에 대한 요약 설명
/// </summary>
공개 클래스 PageBase : System.Web.UI.Page
{
공개페이지베이스()
{
}
}
MyCodeGif.aspx 페이지 파일처럼
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyCodeGif.aspx.cs" Inherits="PageBase" %>즉, 페이지는 PageBase 클래스에서 직접 상속됩니다.
결론: ASP.Net 페이지는 [System.Web.UI.Page 클래스의 상위 클래스에서 상속됨] 확장 하위 클래스에서 상속할 수 있습니다.
3. 해결 방법: VS2005에서 어셈블리 이름을 사용자 정의할 수도 있습니다. 즉, 프로젝트 시간을 생성할 때입니다. , 웹사이트 시간이 아닙니다. 즉, 생성한 웹 사이트가 작성된 후 프로젝트를 다시 생성한 다음 웹 사이트 코드를 다시 컴파일할 수 있습니다. aspx 파일의 상속은 완료 후 변경해야 할 수도 있지만 변경할 필요가 없을 수도 있습니다. aspx 파일의 상속은 클래스 이름에만 관련되기 때문에(있는 경우) 저장 방법에 따라 다릅니다. 네임스페이스가 있으면 네임스페이스도 지정해야 합니다). MyCodeGif.aspx 페이지 파일을 다음으로 변경할 수 있습니다.
<%@ 페이지 언어="C#" AutoEventWireup="true" Inherits="PageBase" %>
내부에서 CodeFile="MyCodeGif.aspx.cs"를 제거합니다.
이런 식으로 VS2003과 같은 방식으로 웹사이트를 게시할 수 있습니다. 과정이 좀 복잡할 수도 있지만, 나중에 유지관리할 때 꽤 유용할 것 같아요. 그리고 결국 VS2003에 익숙해져서 2003년과 마찬가지로 가상화 없는 프로그램도 할 수 있게 됐네요.
완전한 텍스트. 모든 사람에게 유용할 수 있기를 바랍니다.
저자: Xie Ping, Sunset Track 2006-5-27