我得到了解决方案,我想与大家分享。我认为它是SharePoint 2010中的一个错误,它没有很好的记录,甚至没有记录。
以下情况:我们已经有一个包含自定义主页的已部署软件包。我们现在处于需要重新命名或从包中删除masterpage的情况。我们正在执行Update-SPSolution,结果是该特定sitecollection的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。因此这里的更新脚本:
Delte旧习俗的母版
[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()