2009-08-14 66 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做它的'自动'的东西。