2012-04-17 79 views
0

在我們的應用程序中,我們需要編譯代碼並加載在內存中生成的DLL。從基礎設施的角度來看,這部分是一個需求,我們無法改變這一點。.NET內存中的DLL和ASP.NET頁面

編譯和加載DLL在內存中沒有問題。但是,ASP.NET aspx頁面無法加載,因爲asp.net無法找到內存中的引用/類型。

我只能想到兩個可能的方法,但不知道哪一個是最實用的方法:

  1. 找到一個方法來編譯和執行aspx頁面或自己使用自定義HTTP處理程序
  2. ASCX控制
  3. 找到一種方法來鏈接內存中的dll作爲執行時的頁面/ ascx控件的引用。

我很欣賞你的見解...

+0

說「在內存中」你的意思是動態加載DLL,使用反射? – Kath 2012-04-17 18:18:53

+0

是的,這是正確的! – sam360 2012-04-17 18:29:23

+0

您是否檢查過使用程序集的全名?如果你給我們一段代碼來看看你做錯了什麼,那將是非常棒的。 – Kath 2012-04-17 18:45:52

回答

0

在公司我曾經在工作,我們有一個「即插即用」的架構,使我們的用戶控件(ASCX)動態地添加到項目中,沒有每次我們添加/修改控件時都需要重新編譯網站。

基本架構包括一個數據庫表,其中包含每個動態控件的名稱,dll位置和ascx頁面。每個控件都被編譯到一個單獨的dll中,並且該dll和ascx頁面一起存儲在文件系統中。每個控件還實現了一個接口,允許我們加載並將其呈現到頁面中。

在每一頁的加載過程中,無論何時遇到接口,我們都會使用LoadControl()動態加載控件到頁面中。

這是你正在嘗試做什麼?

+0

是和否,LoadControl()將ascx加載到當前頁面控件層次結構中,ASP.NET在此階段不允許您向外部內存中的DLL添加額外引用。 我認爲在這種情況下,您需要考慮提供多租戶類型的服務,其中沒有物理預編譯的dll或ascx文件。當租戶請求訪問系統時,需要爲每個租戶加載所有這些元素。 – sam360 2012-04-17 18:25:57