2009-08-14 50 views
10

我們有一大堆用戶控件,我們想從Web應用程序中抽取出來並放入單獨的程序集/庫中,我認爲這很簡單,只需創建類庫並將其拉出將ascx和ascx.cs文件放入項目中,並編譯一個DLL以在我們的應用程序中重用。ASP.NET Web用戶控制庫

但事實並非如此。

我們的最終目標是擁有一個可分發的DLL(類似於Telerik如何分發他們的控件),我們可以將它們放入任何Web應用程序中。這裏的步驟:Turning an .ascx User Control into a Redistributable Custom Control非常簡單,但是這會導致許多名爲controlname.ascx.guid.dll的文件,這不是所需的結果。我甚至無法讓這些工作,因爲我們有需要編譯到程序集中的其他類。

有沒有人成功地在.NET中創建了一個Web用戶控件庫(我們在這裏使用3.5)?我似乎無法找到一個很好的分步指南。

回答

7

如果您想在項目之間共享控件,我的經驗表明,最好的方法是構建自定義的asp.net服務器控件而不是usercontrols。用戶控件適合在同一個項目中共享,但不能在多個項目中共享。

爲此,我建議您在類庫中構建一組自定義服務器控件,並將其用於所有項目。

This book確實相當不錯,在解釋創建服務器的基本控制

編輯:
我目前正在開發一個.NET Web服務器控件庫。我其實沒有按照任何一步一步的指導。我主要考慮使用上面提到的書和MSDN library + Reflector,它是檢查現有MS服務器控件並從中學習的好工具。

+0

是的,我們正在考慮這一點。 – Keith 2009-08-14 22:19:01

+0

所以你考慮編寫自定義服務器控件? – Juri 2009-08-14 22:21:29

+0

是的,但問題在於,用戶控件目前全程使用asp.net控件。例如,我寧願不必寫出HTML來模擬用戶控件中的ListView。 – Keith 2009-08-14 23:13:34

2

我承認有點晚了。

創建一個可重用的用戶控件庫;創建一個新的Web應用程序項目,刪除所有腳手架,添加(數量)用戶控件。從Web應用程序項目創建Web部署項目,在WDP屬性中選擇合併所有控件輸出併爲該庫分配名稱的選項,並確保不允許此網站可更新。

構建WDP並使用Reflector檢查生成的庫;您會看到它包含一個ASP命名空間,並且您精心製作的類型已被重命名爲usercontrol_ascx。在您的目標網站中添加對WDP輸出dll的引用,添加一個系統。使用名稱空間ASP和您在WDP中定義的程序集的名稱將web/pages/controls節點控制爲web.config。

現在,當你使用這個庫的頁面(例如),則必須使用在web.config中定義的別名和類型名作爲在反射器即

<ucl:usercontrol_ascx ... /> 

看到我發現它有用添加對WDP網站的依賴,以便WDP在網站之前建立;現在我可以更改WAP中的用戶控件,而無需在構建網站之前記住構建WAP。

我希望有人發現這個有用,因爲它讓我花了一些灰色毛髮到這個階段,仍然有VS做它的'自動'的東西。