我们有一堆用户控件,我们希望从Web应用程序中取出并进入单独的程序集/库,我认为这就像创建类库和拉动ascx和ascx.cs文件一样简单进入项目,并编译一个DLL,以便在我们的应用程序中重用。
但情况并非如此。
我们的最终目标是拥有一个可分发的DLL(类似于Telerik如何分发其控件),我们可以将其投入任何Web应用程序。这里的步骤:Turning an .ascx User Control into a Redistributable Custom Control非常简单,但是这会导致许多名为controlname.ascx.guid.dll的文件,这不是所需的结果。我甚至无法使这些工作,因为我们有额外的类需要编译到程序集中。
有没有人在.NET中成功创建了一个Web用户控件库(我们在这里使用3.5)?我似乎无法找到一个很好的分步指南。
答案 0 :(得分:9)
我意识到这是一个老话题,但如果有人在寻找创建可重用用户控件库的解决方案,那么事实证明它非常简单。以下是两个很好的分步指南以及源代码:
来自MSDN:Turning an .ascx User Control into a Redistributable Custom Control
来自代码项目:Straight way to create ASP.NET user controls library
第二个链接为第一个链接创建的多个dll提供了解决方案。
答案 1 :(得分:7)
如果你想在项目之间共享控件,我的经验表明,最好的方法是构建自定义的asp.net服务器控件而不是usercontrols。用户控件适合在同一个项目中共享,但不能超过多个。
为此,我建议您在类库中构建一组自定义服务器控件,并在所有项目中使用它。
This book在解释创建服务器控件的基础知识方面做得非常出色
修改强>
我目前正在开发一个.net Web服务器控件库。我实际上没有按照任何分步指南。我主要考虑使用上面提到的书和MSDN库+ Reflector,它是检查现有MS服务器控件并从中学习的好工具。
答案 2 :(得分:2)
我找到了教程Creating and Using User Control Libraries,但它看起来有点像黑客,因为它依赖于构建后的命令行事件将用户控件从一个项目复制到另一个项目。
答案 3 :(得分:2)
有点晚,我承认。
创建可重复使用的用户控件库;创建一个新的Web应用程序项目,删除所有脚手架,添加一个(多个)用户控件。从Web应用程序项目创建Web部署项目,在WDP属性中选择合并所有控件输出的选项并为库指定名称,并确保不检查允许此网站可更新。
构建WDP并使用Reflector检查生成的库;你会看到它包含一个ASP命名空间,你精心制作的类型已被重命名,即usercontrol_ascx。在您的目标网站中添加对WDP输出dll的引用,使用命名空间ASP和您在WDP中定义的程序集的名称将system.web / pages / controls节点添加到web.config。 / p>
现在,当您在页面中使用库时(例如),您必须使用在web.config中定义的别名和Reflector中显示的typename,即
<ucl:usercontrol_ascx ... />
我发现在WDP上添加网站的依赖性是有用的,这样WDP就可以在网站之前构建;现在我可以更改WAP中的用户控件,而无需记住在构建网站之前构建WAP。
我希望有人觉得这很有用,因为它让我有一些白发到达这个阶段并且仍然让VS做“自动”的事情。