public Assembly GetPageAssembly()
{
var pageType = Page.GetType();
return Assembly.GetAssembly(pageType.BaseType == null
|| pageType.BaseType == typeof (Page)
? pageType : pageType.BaseType);
}
無論身在何處控件的實現,一個單獨的DLL或當前之一,它會在年底Page類實例化,並添加到其控件集合。這個頁面可以通過Page方法訪問,並基於這個方法找到程序集。
對於.aspx文件(實際上它們中的幾個如果更多),ASP .Net創建一個dll。如果「繼承」屬性設置,然後將生成的類看起來像:
public _Default_aspx : Namespace._Default, IHttpHandler {
}
此DLL是一個比由Visual Studio,一個「Web應用程序項目」的結果編制不同,我想你更感興趣的是最新的。這個DLL有「_Default:類型,我們在Visual Studio中看到:
public _Default : System.Web.Page
{
}
那麼,爲什麼這個小故事當this.Page.GetType()從服務器控件調用,那麼,如果繼承屬性?這個方法會返回_Default_aspx類型,但是對於你來說是沒用的,因爲你需要由Visual Studio創建的程序集,而不是從aspx/ascx文件中的ASP.Net生成的程序集。如果頁面或控件的Inherit屬性設置了,GetType()就足夠了。
知道了類型,只需調用Assembly.GetAssembly方法就可以返回你需要的程序集組。
我從以前的版本中看到你已經是foun d如何獲取程序集版本 –
調用Assembly.GetExecutingAssembly()爲我提供了定義自定義服務器控件的程序集,而不是ASP.NET程序集(這是兩個不同的程序集,這是我現在只包含在其中的一個重要事實)問題 - 抱歉)。 – lance
GetCallingAssembly –