在试图编辑SharePoint站点中的页面时,我会遇到一个错误。使用WinDbg,我看到实际的错误是:
Microsoft.SharePoint.ApplicationRuntime.SafeControls+UnsafeControlException
在我看来,我的页面上有一个控件,它不包含在web.config的部分中。我已经查看了页面的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)所以看起来我找到了导致问题的控件的GUID (A1)。但是,我不知道有什么方法可以找到这个GUID引用的控件。Server中一定有存储这些信息的表吗?我已经尝试过dbo.WebParts,用GUID针对tp_ID进行选择,但是没有发现任何结果。我想我漏掉了什么?
发布于 2009-08-26 11:11:42
哇哦!)缓慢地远离Server ;)
首先要看的是封闭web部件与已删除web部件之间的区别。
关闭是菜单操作,当你没有在“编辑页面模式”,它只是隐藏web部件对视图- SharePoint仍然试图加载它的程序集,如果没有相应的安全控制条目,你会得到错误。
如果这是问题所在,那么删除它的简单方法是将?contents=1放在URL的末尾,页面将以维护模式打开。
希望这该死的!
发布于 2009-08-25 14:28:15
若要以编程方式操作Web部件,可以使用SPLimitedWebPartManager
请参阅这篇文章,了解如何从页面中删除或定位See部件。
使用调试器,可以很容易地列出所有这些see部件,只需查看特定ID的代码响应DisplayTitle即可。
发布于 2010-07-01 14:11:47
使用反射器,我发现它们就是这样为每个控件生成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。祝好运。我也有同样的问题。我计划一次移除一个控件,直到我确定它是哪一个。
https://stackoverflow.com/questions/1328614
复制相似问题