Sharepoint 从Layouts目录运行母版页

Sharepoint 从Layouts目录运行母版页,sharepoint,sharepoint-2007,master-pages,Sharepoint,Sharepoint 2007,Master Pages,为了简化我们的SharePoint环境,我希望有一个中央和单一的位置来存储所有母版页,因此我希望直接从_layouts目录引用母版页文件 我将文件添加到“\LAYOUTS\MyMasterPages”目录,然后更新SPWeb对象以使用该路径: web.MasterUrl = "/_layouts/MyMasterPages/newdefault.master" 但当我进入该网站时,我得到: 引用的文件 “/_layouts/MyMasterPages/newdefault.master” 此页

为了简化我们的SharePoint环境,我希望有一个中央和单一的位置来存储所有母版页,因此我希望直接从_layouts目录引用母版页文件

我将文件添加到“\LAYOUTS\MyMasterPages”目录,然后更新SPWeb对象以使用该路径:

web.MasterUrl = "/_layouts/MyMasterPages/newdefault.master"
但当我进入该网站时,我得到:

引用的文件 “/_layouts/MyMasterPages/newdefault.master” 此页上不允许使用。在 System.Web.UI.TemplateParser.ProcessError(字符串 信息)在 System.Web.UI.BaseTemplateParser.GetReferencedType(VirtualPath 虚拟路径,布尔allowNoCompile)
在 System.Web.UI.PageParser.ProcessMainDirectiveAttribute(字符串 deviceName、字符串名称、字符串值、, IDictionary语法分析数据)位于 System.Web.UI.TemplateParser.ProcessMain指令(IDictionary 主要指令)

我假设这可能是由于信任级别的安全策略和CAS配置造成的,但我不能完全确定。是否有一种方法允许在整个企业中使用母版页,或者我一直在使用/\u目录/虚拟路径?

我的理解(但我不知道为什么)是母版页需要位于每个网站集的母版页库中

由于您需要将这些包部署到服务器场中的每个SharePoint服务器(前端、应用程序、数据库等),因此我认为需求要么与集群相关,要么与数据库和重影相关

在这两种情况下,无论服务器场大小如何,都要确保使用自定义功能作为部署母版页的方式


我理解你想用SharePoint按自己的方式做事,虽然我通常也有这种想法,但过去一年的痛苦告诉我,生活在推荐的SharePoint边界内是最好的方式。

SharePoint网站使用的母版页必须位于母版页库中。据我所知,这是SharePoint的一项硬性要求

这会给你带来比你想象的更多的好处。这允许您使用SharePoint designer实时更改母版页,更改仅对您可见。母版页签入并作为主要版本发布后,更改将对公众可见。母版页上也有版本历史记录

我理解你的痛苦,我和你的处境一样。我学到的是:不要与平台抗争,只需在平台内工作。

这对我很有用:

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);
    this.MasterPageFile = "path to masterpage";
}
根据以下提议:

将母版页限制在网站集级别没有什么意义。我不知道MS为什么这么做。它迫使您在多个位置维护同一个文件,因为任何企业解决方案都不能局限于单个网站集。我想找出阻止你这么做的机制,然后权衡我的选择。我知道你在说什么,但我知道每个网站集都是一个数据库实例。再说一次,虽然我不知道,但我认为有一个线索。他们这么做是因为主要的开发场景是使用SharePoint designer。由于SharePoint designer只能对内容数据库中的文件进行更改,因此有必要将其作为依赖项。