跨多个网站共享用户控件

时间:2010-04-14 07:54:02

标签: c# asp.net visual-studio projects-and-solutions

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

反正...

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

  1. 容易发展。要是我们 改变用户控制,我们想做 它是一个地方。我们希望能够 在网络中编辑和调试 我们正在工作,而不必 管理ascx的多个副本 文件。
  2. 易于部署。我们想成为 能够抓取并发布ascx 多个网站中的文件 没有太多麻烦。
  3. 不幸的是,虚拟目录方法仅针对#2,而“用户控制库”针对#2,而只是#1的一部分。使用“用户控件库”,您可以针对用户控件库源进行调试,但是如果您在工作Web中编辑ascx,则下次构建“用户控件库”时将覆盖更改。这类似于服务器控件的操作方式:必须在别处编辑,必须编译才能更新。例外情况是必须复制“用户控制库”,而不是仅仅更新.dll引用。

    解?

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

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

    我希望这有帮助!

答案 1 :(得分:1)

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

我决定在单独的类库中使用自定义Web控件来共享常见的UI功能。但也许斯科特的解决方案适合你。

答案 2 :(得分:0)

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

HTH