假设您有两个单独的ASP.NET Web应用程序项目,它们都需要使用通用的MasterPage。
在不重复代码的情况下跨项目共享MasterPage的最佳方法是什么?最好不必诉诸源控制或文件系统黑客。
答案 0 :(得分:11)
我试图完成同样的事情。我研究了几个解决方案,但我认为使用虚拟目录可能是共享母版页的最佳方式。
以下是您可以查看的几个来源。
文章末尾的第三颗子弹告诉你可以分享Masterpages的方法。
答案 1 :(得分:4)
来自K. Scott Allen的ASP.Net Master Pages: Tips, Tricks, and Traps文章,关于“分享母版页”:
第一种方法是将共享母版页文件复制到 IIS Web服务器上的单个位置。然后可以创建每个应用程序 将虚拟目录作为子目录并指向虚拟目录 到母版页的真实目录。然后可以设置应用程序 页面的MasterPageFile属性为虚拟名称 目录,以及主页文件的名称。当我们放弃一个 将主页面文件更新到真实目录,新的主页面 将立即出现在所有应用程序中。
第二种方法是使用版本控制系统来共享一组 跨多个项目的母版页文件。大多数源控制/ 版本控制系统支持某种级别的“共享”功能, 文件或文件夹可以出现在多个项目中的位置。当一个 开发人员检查更新的母版页文件,其他项目 将立即看到变化(虽然这种行为通常是 配置)。在生产和测试中,每个应用程序都需要 重新部署更新母版页以显示。
最后,ASP.NET 2.0中的VirtualPathProvider可以提供文件 在文件系统上不存在。使用VirtualPathProvider,一套 主页面可以存在于所有应用程序的数据库表中 使用。有关VirutalPathProvider的优秀文章,请参阅“Virtualizing Access to Content: Serving Your Web Site from a ZIP File”。
答案 2 :(得分:2)
将主要副本保留在源代码管理中,让源代码管理系统担心它。
答案 3 :(得分:0)
符号链接是指向另一个文件的文件系统对象 系统对象。被指向的对象称为目标。 符号链接对用户是透明的;链接显示正常 文件或目录,可由用户或应用程序执行操作 以完全相同的方式。
答案 4 :(得分:0)
假设您可以为所有项目(例如,源代码管理树中的公共文件夹)创建公共存储库,则可以使用相对路径将母版页添加为链接。
然而,IIRC,Visual Studio制作从外部路径添加的文件的本地副本。您可能需要对解决方案/项目文件进行文本编辑以添加链接文件。
当然,这是假设您使用“Web应用程序”格式。较旧的VS“网站”没有项目文件,并且依赖于站点文件夹中的所有文件。
答案 5 :(得分:0)
AFAIK没有优雅的方式去做你想要的事情.VS总是会复制它。
我认为老实说它可能不是一个好主意..显然你想分享最低的公共代码,但是整个MasterPage?...听起来你可能会遇到麻烦,因为一个小的改动可能会有这样的对一个或多个申请的影响..
我建议将功能好的部分分离到组件/控件中并进行部署。
答案 6 :(得分:0)
我不明白为什么你想要在不同的项目中使用相同的标记,如果你这样做,我不知道一个简单的方法。
但是使用代码,显然你可以编写一个继承自
的代码文件System.Web.UI.MasterPage
在那里的所有母版页中放入你想要的任何逻辑。将它构建为您的精彩dll,然后将其包含在您的项目中。