0

SharePoint 2010ソリューションを更新した後に404エラーが発生しましたが、その理由がわかりません。ログファイルを分析しました。更新プロセスは成功しました。変更されたすべてのファイルが置き換えられ、追加され、削除されました。ログは、更新も成功したことを示しています。ブラウザでSiteCollectionを開いた後、404エラーが表示され、sitecollectionに到達できません。

ソリューションで何を変更しましたか:

2つの要素ファイルを追加しました

  • 未使用の空の機能を削除しました
  • 廃止されたカスタムMasterPageを削除しました
  • カスタムUserControlを追加しました

WebConfigは正常に更新され、SafeControlsに適切な値でアセンブリが含まれています。

この展開されたソリューションのコンテンツデータベースも問題ないようです。

SiteCollection設定には、PowerShellを介してアクセスできます。コレクションは構成に存在し、すべての値も問題ないようです。

私もフィドラーに確認しました。ファイルがないと書いてあります。私もIISのリセットを何度も行っています。

更新されたソリューションを使用して新しいサイトコレクションを作成するのに問題はありません。そして最後に追加するもの:ListDefinitions、ContentTypesに変更はありませんでした。ONET.xmlにいくつかの変更のみが行われました(サイト定義からカスタムマスターページを削除します)。

うまくいけば、誰かがこの問題を抱えており、それに対処する方法を知っています。

4

1 に答える 1

1

私は解決策を得たので、あなたと共有したいと思います。よく文書化されていない、または文書化されていない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()
于 2012-11-27T16:06:28.747 に答える