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 中的某处必须有一个存储此信息的表?我已经尝试过 dbo.WebParts,使用 GUID 选择 tp_ID,但它什么也没找到。我想我错过了什么?

4

3 回答 3

2

哇!慢慢远离 SQL Server ;)

首先要看的是关闭的 Web 部件和已删除的 Web 部件之间的区别

Closed 是您在未处于“编辑页面模式”时获得的菜单操作,它只是从视图中隐藏 Web 部件 - SharePoint 仍会尝试加载其程序集,如果没有相应的安全控制条目,您将收到错误消息。

如果这是问题,那么删除它的简单方法是将?contents=1放在 URL 的末尾,页面将以维护模式打开。

希望这个帮助!

于 2009-08-26T11:11:42.340 回答
0

要以编程方式操作 Web 部件,可以使用SPLimitedWebPartManager

请参阅本文以了解如何从页面中删除或定位 web 部件。

使用调试器,列出所有这些 webpart 应该相当容易,只需查看您的特定 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。祝你好运。我也有同样的问题。我计划一次删除一个控件,直到确定它是哪个控件。

于 2010-07-01T14:11:47.777 回答