2012-11-27 36 views
0

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

我有什么溶液中的变化:

增加了两个组件文件

  • 删除未使用的空要素
  • 删除过时的定制母版
  • 添加自定义的用户控件

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

此部署解决方案的内容数据库似乎也没有问题。

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

我也检查了Fiddler。它说没有文件。我也多次进行了IIS重置。

我没有问题用更新的解决方案创建新的网站集。最后要补充的是:ListDefinitions和ContentTypes没有变化。只对ONET.xml进行了一些更改(从网站定义中删除自定义主页面)。

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

回答

1

我得到了解决方案,我想与大家分享。我认为它是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()