24

假设您有两个单独的 ASP.NET Web 应用程序项目,它们都需要使用一个通用的 MasterPage。

在无需复制代码的情况下跨项目共享 MasterPage 的最佳方式是什么?最好不必求助于源代码控制或文件系统黑客。

4

7 回答 7

11

我试图完成同样的事情。我研究了几个解决方案,但我认为使用虚拟目录可能是共享母版页的最佳方式。

您可以查看以下几个来源。

文章末尾附近的第三个项目符号告诉您也可以共享母版页的可能方式。

于 2008-12-17T19:36:53.040 回答
4

来自 K. Scott Allen 的ASP.Net 母版页:提示、技巧和陷阱文章,关于“共享母版页”:

第一种选择是将共享母版页文件复制到 IIS Web 服务器上的单个位置。然后,每个应用程序都可以创建一个虚拟目录作为子目录,并将虚拟目录指向母版页的真实目录。然后,应用程序可以将页面的 MasterPageFile 属性设置为虚拟目录的名称以及母版页文件的名称。当我们将更新后的母版页文件放入真实目录时,新的母版页将立即出现在所有应用程序中。

第二种方法是使用版本控制系统在多个项目之间共享一组母版页文件。大多数源代码控制/版本控制系统都支持某种程度的“共享”功能,其中一个文件或文件夹可以出现在多个项目中。当开发人员签入更新的母版页文件时,其他项目将立即看到更改(尽管此行为通常是可配置的)。在生产和测试中,需要重新部署每个应用程序才能显示更新母版页。

最后,ASP.NET 2.0 中的 VirtualPathProvider 可以为文件系统上不存在的文件提供服务。使用 VirtualPathProvider,一组母版页可以存在于所有应用程序使用的数据库表中。有关 VirutalPathProvider 的优秀文章,请参阅“<a href="https://msdn.microsoft.com/en-us/library/aa479502.aspx" rel="nofollow noreferrer">虚拟化对内容的访问:为您的 Web 服务来自 ZIP 文件的站点”。

于 2008-09-18T16:07:55.810 回答
2

在源代码控制中保留一个主要副本,让您的源代码控制系统担心它。

于 2008-08-27T19:00:22.130 回答
0

使用符号链接

符号链接是指向另一个文件系统对象的文件系统对象。被指向的对象称为目标。符号链接对用户是透明的;链接显示为普通文件或目录,用户或应用程序可以以完全相同的方式对其进行操作。

于 2008-08-27T19:00:38.713 回答
0

假设您可以为所有项目创建一个公共存储库(例如,源代码管理树中的一个公共文件夹),您可以使用相对路径将母版页添加为链接。

但是,IIRC,Visual Studio 会制作从外部路径添加的文件的本地副本。您可能需要对解决方案/项目文件进行文本编辑以添加链接文件。

当然,这是假设您使用“Web 应用程序”格式。较旧的 VS“网站”没有项目文件,并且依赖于站点文件夹中的所有文件。

于 2008-08-27T19:02:55.667 回答
0

AFAIK 没有优雅的方式来做你想做的事。VS 总是会复制它。

老实说,我认为这可能不是一个好主意.. 显然您想共享最低的通用代码,但是整个 MasterPage?.. 听起来您可能是在自找麻烦,因为一个微小的更改可能会对其中一个产生如此大的影响或更多应用程序..

我建议改为将好的功能部分分离到组件/控件中并部署它们。

于 2008-08-27T19:10:01.890 回答
0

我不明白你为什么要在不同的项目中使用相同的标记,如果你这样做,我不知道一个简单的方法。

但是对于代码,显然您可以编写一个继承自的代码文件

System.Web.UI.MasterPage

在所有母版页中放入您想要的任何逻辑。将其构建为您的出色 dll,然后将其包含在您的项目中。

于 2008-09-18T16:12:29.760 回答