2009-07-29 68 views
3

我已經編寫了一個VirtualPathProvider來更改aspx頁面如何加載到我的ASP.Net應用程序中。作爲這個過程的一部分,我刪除了代碼隱藏文件,我只是確定我的頁面是從一個特定的頁面類繼承的。 如:BuildManager解決頁面繼承問題

<%@ Page Language="C#" AutoEventWireup="true" Inherits="Namespace.PageClass" %> 

如果我這樣做,我得到以下異常:

HttpParseException Could not load type 'Namespace.PageClass'

我也曾嘗試以下操作:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="Namespace.PageClass, AssemblyName" %> 

這將產生以下錯誤:

HttpParseException Could not load the assembly 'AssemblyName'. Make sure that it is compiled before accessing the page.

應用程序啓動時我所需要的組件加載到當前應用程序域:

AppDomain.Current.Load(...) 

在我假設的問題在於時刻與BuildManager爲解決命名空間/大會參考的能力....但如果誠實...這是一個猜測:-)

有人能夠說明這一點嗎?

+0

是否存在堆棧跟蹤? – 2009-07-29 10:46:02

+0

nope - 這一切都發生在System.Web內部,因爲頁面被解析...沒有堆棧跟蹤對我來說:-( – 2009-07-29 11:33:58

回答

2

您的網頁必須使用完整指定的課程位置 - 即Inherits="MyNamespace.MyClass, MyAssembly"

然後將程序集加載到appDomain中不會幫助AppDomain解決它。它不會走動態加載的程序集。所以你必須訂閱AppDomain.ResolveAssembly事件。

private Assembly myDynamicAssembly = null; 

protected void Application_Start(object sender, EventArgs e) 
{ 
     myDynamicAssembly = Assembly.LoadFrom(Server.MapPath("MyLocation/MyAssembly.dll")); 

     AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); 
} 

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
{ 
     if (args.Name == "MyAssembly") 
     { 
      return myDynamicAssembly; 
     } 

     return null; 
} 

然後你就完成了。現在,運行時知道如何從這個動態加載的程序集中解析類。

0

可能的原因:

  1. 如果你指的是任何代碼隱藏模塊中的.aspx頁面或頁面的Global.asax以及Web應用程序has'nt已經建成,那麼你得到這個錯誤。只需再次構建應用程序並確保類型Namespace.PageClass在其中一個Web應用程序程序集中可用。

    在編譯時使用@Assembly指令將程序集鏈接到aspx頁面。

    @ Assembly Name =「assemblyname」Src =「pathname」使所有程序集的類和接口都可供使用。

2.這種錯誤的另一個原因可能是在IIS中配置的ASP.NET的錯誤版本。 在IIS

  1. 轉到開始菜單,點擊運行(或者使用Win鍵+ R)

  2. 鍵入inetmgr,然後按回車,打開Internet信息服務選擇ASP.NET的正確版本應用

  3. 展開樹節點顯示本地計算機名稱,然後導航到網站 - >默認網站

  4. 右鍵單擊默認Web站點節點和SE ON彈出菜單選項屬性

    5.導航到屬性頁面中的ASP.NET選項卡並設置正確的/最新版本。

+0

Pradeepneo - 謝謝,但不幸的是沒有這樣做 這些程序集在運行時動態加載和所以我不能使用@Assembly指令將它們指向正確的位置 同樣不是用於解析子控件引用的@Assembly指令 - 不是頁繼承? 我當前在Application_Start中動態加載程序集:AppDomain.Current.Load(...)。 我認爲這是我所需要做的。 – 2009-07-29 13:03:29