共享用户控件可以访问多个网站

我目前正在开展一个涉及三个不同网站的项目,这些网站具有许多常用function。 目前,常用function被放置在充满用户控件的不同网站中。

问题是在多个网站上共享用户控件。 环顾SO和其他网站,唯一的解决方案似乎是使用虚拟目录。 由于这是一个可行的解决方案(我们现在就是这个),它似乎不是一个“干净”的解决方案。

在不同站点之间共享通用function(包括GUI / HTML)存在哪些“最佳实践”?

(例如)是否可以创建单个Web应用程序项目并将子目录(每个子目录都有自己的web.config)部署到不同的生产环境中?

有一种通过构建ScottGu描述的用户控制库来共享用户控件的解决方案 。 在我看来,这个解决方案也不是很干净,因为你必须复制预编译的文件才能使这个解决方案有效。

我决定在单独的类库中使用自定义Web控件来共享常见的UIfunction。 但也许Scott的解决方案适合您。

我一直在处理这个问题很长一段时间,并且已经使用了虚拟目录和“用户控制库”方法,并且发现它们都需要。 我很惊讶,微软没有解决这个问题来编译用户控件,就像服务器控件一样。

无论如何…

在尝试用户控件库时,我们大多数人都会寻找两种便利:

  1. 容易发展。 如果我们更改用户控件,我们希望在一个地方执行此操作。 我们希望能够在我们正在工作的Web中进行编辑和调试,而无需管理ascx文件的多个副本。
  2. 易于部署。 我们希望能够在多个网站中抓取并发布ascx文件,而不会有太多麻烦。

不幸的是,虚拟目录方法仅针对#2,“用户控制库”地址#2,而只是#1的一部分。 使用“用户控件库”,您可以针对用户控件库源进行调试,但是如果在工作Web中编辑ascx,则下次构建“用户控件库”时将覆盖更改。 这类似于服务器控件的操作方式:必须在别处编辑,必须编译才能更新。 例外情况是必须复制“用户控制库”,而不是仅仅更新.dll引用。

解?

我用来解决#1的是符号链接 。 在存储库中创建一个公共控件文件夹,并根据需要将该文件夹符号链接到每个Web。 您对符号链接文件夹所做的任何更改都将对源公共控件文件夹进行。

要解决#2,我只需将控件复制到适当的位置即可部署完整的网站。 您也可以轻松地执行虚拟目录,而不是在每个网站中推出符号链接文件夹。 由于担心性能问题(大量网络,大量流量),我倾向于偏离虚拟目录以获取常见的用户控件托管源。

我希望这有帮助!

恕我直言,最好使用虚拟目录解决方案,即使它不干净。 这可以解决很多问题,因为您可以在多个网站上使用它,而无需在每个网站中部署额外的文件,如果有更改,您只能在一个地方进行更改。

HTH