私は解決策を得たので、あなたと共有したいと思います。よく文書化されていない、または文書化されていないSharePoint 2010のバグだと思います。
次のシナリオ: カスタム マスターページを含むデプロイ済みパッケージが既にあります。現在、マスターページの名前を変更するか、パッケージから削除する必要がある状況にあります。Update-SPSolution を実行していたところ、その特定のサイト コレクションで 404 エラーが発生しました。ログまたはその他の部分を分析すると、エラーは発生せず、このバグに関する情報もありません。ログからのすべてが正常に機能しているようです。
しかし、それは嘘です。更新を実行した瞬間に、その特定のサイト コレクションに割り当てられたマスターページがなくなり、初期化中に null 例外が発生し、ログに記録されません。404 エラーが結果です。
私は現在、修正プログラムの作成に 1 日を費やしています。更新に進む前に、ソリューションを削除し、別のマスターページでソリューションを参照する必要があります。これは 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()
masterpage を手動で削除した後、ソリューションの更新に進むことができ、すべてが正常に機能します。これが同じ状況にある人に役立つことを願っています。
更新: 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()