Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在多个网站上共享用户控件_C#_Asp.net_Visual Studio_Projects And Solutions - Fatal编程技术网

C# 在多个网站上共享用户控件

C# 在多个网站上共享用户控件,c#,asp.net,visual-studio,projects-and-solutions,C#,Asp.net,Visual Studio,Projects And Solutions,我目前正在做一个项目,涉及三个不同的网站,有很多共同的功能。目前,通用功能被放置在一个充满用户控件的不同网站中 问题在于跨多个网站共享用户控件。环顾SO和其他网站,唯一的解决方案似乎是使用虚拟目录。由于这是一个可行的解决方案(我们目前正在考虑),因此它似乎不是一个“干净”的解决方案 在不同站点之间共享公共功能(包括GUI/HTML)方面存在哪些“最佳实践” (例如)是否可以创建单个Web应用程序项目并将子目录(每个子目录都有自己的Web.config)部署到不同的生产环境中?通过构建ScottG

我目前正在做一个项目,涉及三个不同的网站,有很多共同的功能。目前,通用功能被放置在一个充满用户控件的不同网站中

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

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

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

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


我决定在单独的类库中使用自定义web控件来共享通用UI功能。但是,Scott的解决方案可能适合您。

我认为使用虚拟目录解决方案更好,即使它不干净。这将解决很多令人头痛的问题,因为您可以在多个网站上使用它,而无需在每个网站上部署额外的文件,而且如果有更改,您只需在一个地方执行


HTH

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

无论如何

在尝试用户控件库时,我们大多数人都希望有两种方便:

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

    解决方案

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

    为了解决#2,我只需部署完整的网站,并将控件复制到相应的位置。您还可以轻松地创建一个虚拟目录,而不必在每个网站中推出符号链接文件夹。由于担心性能问题(大量的网站、大量的流量),我倾向于避开虚拟目录,以获得托管源代码的普通用户控件


    我希望这有帮助

    类库似乎是最明显的非狡猾的方法。