2011-10-14 3 views
0

서버 컨트롤이 렌더링 된 페이지가 포함 된 ASP.NET 프로젝트에 대한 버전 정보를 표시하는 ASP.NET 사용자 지정 서버 컨트롤을 작성하려고합니다.사용자 지정 서버 컨트롤의 OnInit에서 ASP.NET 어셈블리를 가져 옵니까?

해당 ASP.NET 프로젝트의 어셈블리를 가져 오는 C# 구문은 무엇입니까? 이 사용자 지정 서버 컨트롤의 코드 내에서 오버라이드 (override)하는 OnInit 주어진다

...

protected override void OnInit(EventArgs e) { 
    System.Reflection.Assembly assembly = Foo(); 
} 

가 ... 무슨 일이 푸에 간다()?

편집 : 사용자 지정 서버 컨트롤은 ASP.NET 프로젝트/어셈블리가 아닌 클래스 라이브러리 프로젝트/어셈블리에 정의되어 있습니다.

답변

1
public Assembly GetPageAssembly() 
{ 
    var pageType = Page.GetType(); 
    return Assembly.GetAssembly(pageType.BaseType == null 
           || pageType.BaseType == typeof (Page) 
            ? pageType : pageType.BaseType); 
} 

컨트롤의 구현이 아무리은 별도의 DLL 또는 현재, 그것은 결국 페이지 클래스의 인스턴스와의 Controls 컬렉션에 추가됩니다. 이 페이지는 Page 메서드를 통해 액세스 할 수 있으며이를 기반으로 어셈블리를 찾습니다.
.aspx 파일의 경우 (실제로 두 개 이상인 경우) ASP .Net은 DLL을 만듭니다. 이 DLL은 비주얼 스튜디오,에 "웹 응용 프로그램 프로젝트"의 결과로 컴파일 한 다른 내가 당신을 생각

public _Default_aspx : Namespace._Default, IHttpHandler { 
} 

다음은 속성이 다음 생성 된 클래스는 같이 보일 것입니다, 설정 "상속"경우 최신 정보에 대해 더 관심이 있습니다. 우리는 비주얼 스튜디오에서 볼 수 있음 입력 :이 DLL은 "_Default있다

public _Default : System.Web.Page 
{ 
} 

왜 상속 속성 경우 this.Page.GetType()가, 다음, 서버 컨트롤에서 호출이 짧은 이야기? 이 설정되면 메서드는 _Default_aspx 형식을 반환하지만 aspx/ascx 파일에서 ASP .Net에 의해 생성 된 어셈블리가 아니라 Visual Studio에서 만든 어셈블리가 필요하므로 메서드는 _Default_aspx 형식을 반환하지만 쓸모가 없습니다. 페이지 또는 컨트롤에 특성 집합 상속 다음 GetType을()은 충분하다.
유형을 알고, A는 단순히 Assembly.GetAssembly 방법에 전화를 당신이 필요로하는 어셈블리를 반환합니다.

+0

난 당신이 이미 foun 것을 당신의 이전 버전에서 보았다 d 어셈블리 버전을 얻는 방법 –

+0

Assembly.GetExecutingAssembly()를 호출하면 ASP.NET 어셈블리가 아닌 사용자 지정 서버 컨트롤이 정의 된 어셈블리가 제공됩니다.이 어셈블리는 두 가지 어셈블리로, 이제는 질문 - 미안). – lance

+0

GetCallingAssembly –

관련 문제