我得到了解决方案,我想与你分享。我认为它是 SharePoint 2010 中的一个错误,没有很好的记录..甚至没有记录。
以下场景:我们已经部署了一个带有自定义母版页的包。我们现在处于需要从包中重命名或删除母版页的情况。我们正在执行 Update-SPSolution,结果是该特定站点集合的 404 错误。当我们分析日志或任何其他部分时,我们不会得到任何错误,没有关于这个错误的信息,日志中的一切似乎都工作正常。
但那是谎言。在我们执行更新的那一刻,分配给该特定网站集的母版页消失了,并在初始化期间发生空异常,该异常不会被记录。结果是 404 错误。
我现在花了一天时间来开发修复程序。在我们继续更新之前,我们必须删除并使用不同的母版页引用解决方案。这可以通过 PowerShell 完成。例如,它可能看起来像这样:
# Delte old custom masterpage
$web = get-spweb http://development/mysite
$lib =$web.GetFolder("_catalogs/masterpage")
$file = $lib.Files["MyMaster.master"];
$file.Delete();
$web.Dispose();
# Revert Branding to SP Default
$site = Get-SPSite http://development/mysite
$site | Get-SPWeb -limit all | ForEach-Object { $_.MasterUrl = $_.ServerRelativeUrl + "/_catalogs/masterpage/v4.master";$_.Update() }
$site.Dispose()
在我们手动删除母版页后,我们可以继续进行解决方案更新,一切都会正常工作。希望这会帮助任何处于相同情况的人。
更新:我认识到有时 powershell 无法删除母版页。这是因为母版页仍在内存中。因此,我们需要清理 GC。因此这里更新的脚本:
删除旧的自定义母版页
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
$web = get-spweb http://development/mysite
$lib =$web.GetFolder("_catalogs/masterpage")
$file = $lib.Files["MyMaster.master"];
$file.Delete();
$web.Dispose();
# Revert Branding to SP Default
$site = Get-SPSite http://development/mysite
$site | Get-SPWeb -limit all | ForEach-Object { $_.MasterUrl = $_.ServerRelativeUrl + "/_catalogs/masterpage/v4.master";$_.Update() }
$site.Dispose()