65.9K
CodeProject 正在变化。 阅读更多。
Home

在项目之间共享用户控件

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.26/5 (15投票s)

2004年11月29日

3分钟阅读

viewsIcon

37054

如何在项目之间共享用户控件。

引言

最近我遇到了一个有趣的问题:我正在开发一个项目,并开发了一些用户控件供该项目使用。过了一段时间,我开始了另一个项目,并希望在新项目中使用相同的用户控件。问题是我找不到一种方法可以在项目之间共享这些控件,并且能够将这些控件从使用它们的项目中分离出来。

动机

我需要这个解决方案的原因是,曾经有10个不同的项目在使用相同的用户控件。每次我想更改其中一个用户控件时,我必须在所有10个项目中都进行更改,然后重新编译并重新部署它们。现在,我有一个包含用户控件的项目,并且其中的每一个更改都会应用到所有站点。
我更喜欢使用用户控件而不是将它们转换为服务器控件的原因是,有时某些控件在演示和事件处理方面非常复杂和繁重(多个按钮、文本框等),将其转换为服务器端控件可能会非常麻烦。

如何操作

这个问题的解决方案非常简单

首先,我将用户控件分离到一个单独的项目中。新项目仅包含用户控件以及与之相关的文件。

第二步是将用户控件项目连接到将要使用它们的项目。为此,首先我们需要在每个项目中定义对用户控件项目的引用。下一步将是(也是最重要的一步)转到IIS,并在项目的Web目录下创建一个虚拟目录,该虚拟目录将指向包含用户控件的目录(它不应在IIS中定义为应用程序,因此请确保在创建虚拟目录后删除该应用程序)。最后一步是在代码中使用用户控件。这应该通过引用它们来完成,就好像它们是项目的一部分并放置在子目录中一样(根据我们在IIS中给虚拟目录的名称)。

就这些。

关于资源的封装:使用虚拟目录将用户控件映射到项目文件夹可以解决这个问题,因为当你尝试使用资源时,请求会根据从请求到包含站点中资源的路径进行处理。这意味着:只要你使用相对于用户控件项目内部资源的相对路径,以及包含项目中的事件资源(不推荐,因为它会在项目之间创建依赖关系),你都是安全的。

完成所有这些之后,我们就可以在项目之间共享用户控件了。

一个小问题

这种方法存在一个小问题(这很重要,我忘记在文章中提及):每次你在用户控件的代码背后进行更改时,你应该在所有使用这些控件的项目中重新部署它的DLL。但是:如果你不使用代码背后:你是安全的(我经常使用);如果你使用:复制一些DLL比重新编译和重新部署10个项目简单得多!!!

享受吧。

 

 


 

© . All rights reserved.