2

SharePoint サイトでページを編集しようとすると、エラーが発生します。WinDbg を使用すると、実際のエラーは次のようになります。

Microsoft.SharePoint.ApplicationRuntime.SafeControls+UnsafeControlException

これは、web.config の <SafeControls> セクションに含まれていないコントロールがページにあるように見えます。ページの aspx ファイルを確認しましたが、web.config で参照されていないコントロールが表示されません。

もう少し掘り下げて (そしてSosex.dllを使用して)、エラーにつながるコールスタックから次のデータを取得しました。

0:013> !mframe 03
0:013> !mdv
Frame 0x3: (Microsoft.SharePoint.ApplicationRuntime.SafeControls.GetTypeFromGuid(System.Guid)):
[A0]:this:0xc00c03e8 (Microsoft.SharePoint.ApplicationRuntime.SafeControls)
[A1]:guid:{ef2d8253-a451-56da-be1d-5f32d5227173} VALTYPE (MT=0000064278430ea8, ADDR=000000000308caa0) (System.Guid)
[L0]:null (System.Type)
[L1]:0x633c50 (System.String) STRVAL=The type could not be found or it is not registered as safe.
[L2]:null (System.Type)

問題の原因となっているコントロール ([A1]) の GUID が見つかったようです。ただし、この GUID が参照しているコントロールを見つける方法がわかりません。この情報を格納する SQL Server のどこかにテーブルが必要ですか? GUID で tp_ID に対して選択して、dbo.WebParts を既に試しましたが、何も見つかりませんでした。私は何かが足りないと思いますか?

4

3 に答える 3

2

おっと!ゆっくりと SQL Server から離れてください ;)

最初に確認することは、閉じられた Web パーツと削除された Web パーツの違いです。

Closed は、「ページの編集モード」ではないときに得られるメニュー操作であり、Web パーツをビューから非表示にするだけです。SharePoint は引き続きそのアセンブリを読み込もうとし、対応する安全なコントロール エントリがない場合はエラーが発生します。

これが問題である場合、簡単に削除するには、URL の末尾に?contents=1を追加すると、ページがメンテナンス モードで開きます。

これが役立つことを願っています!

于 2009-08-26T11:11:42.340 に答える
0

プログラムで Web パーツを操作するには、SPLimitedWebPartManagerを使用できます。

ページから Web パーツを削除または検索する方法については、この記事を参照してください。

デバッガーを使用すると、これらすべての Web パーツを一覧表示して、特定の ID に対応する DisplayTitle を確認するのは非常に簡単です。

于 2009-08-25T14:28:15.043 に答える
0

リフレクターを使用して、これが各コントロールの GUID を生成する方法であることがわかりました。

internal static Guid GetTypeId(MD5HashProvider md5Provider, Type type, string assemblyName)
{
    byte[] bytes = new UnicodeEncoding().GetBytes(assemblyName + "|" + type.FullName);
    return new Guid(md5Provider.GetHash(bytes));
}

したがって、本当にそれを見つけたい場合は、すべてのアセンブリを実行し、GUID を入力して一致させます。幸運を。私も同じ問題を抱えてる。どのコントロールか特定できるまで、一度に 1 つのコントロールを削除する予定です。

于 2010-07-01T14:11:47.777 に答える