Update-SPSolution之后的SharePoint 404错误

时间:2012-11-27 12:52:51

标签: sharepoint-2010

更新SharePoint 2010解决方案后出现404错误,我不知道原因。 我已经分析了日志文件,更新过程是成功的,所有已更改的文件都已被替换,添加或删除。日志告诉我更新也是成功的。通过浏览器打开SiteCollection后,显示404错误,无法访问sitecollection。

我在解决方案中有哪些变化:

添加了两个元素文件

  • 删除了未使用的空功能
  • 删除了过时的自定义主页
  • 添加了自定义UserControl

WebConfig已成功更新,它包含SafeControls中的程序集,并具有正确的值。

此部署解决方案的内容数据库似乎也很好。

可以通过PowerShell访问SiteCollection设置。该集合确实存在于配置中,并且所有值似乎都很好。

我也和Fiddler一起检查过。它说没有档案。我已经多次确认了IIS重置。

使用更新的解决方案创建新的网站集没有任何问题。最后要添加的内容:ListDefinitions,ContentTypes没有变化。仅对ONET.xml进行了一些更改(从站点定义中删除自定义母版页)。

希望有人遇到过这个问题并且知道如何处理它。

1 个答案:

答案 0 :(得分:1)

我得到了解决方案,我想与您分享。我认为它是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。因此这里更新了脚本:

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()