在我的SharePoint代码中,我有以下几行:
SPWeb web = site.RootWeb; //site is an SPSite object
当我重建项目并在程序集上运行SPDispose工具时,出现以下错误:
模块:Blah.SharePoint.Features.Core.dll方法: Blah.SharePoint.Features.Core.Helpers.FeatureDeploymentHelper.RemoveWebPartFiles(Microsoft.SharePoint.SPFeatureReceiverProperties,System.String) 声明:web:= site。{Microsoft.SharePoint.SPSite} get_RootWeb() 资源: C:\ XXX \ XXX \ MAIN \源文件\ SharePoint \功能\核心\助手\ FeatureDeploymentHelper.cs 行:26
注意:未处置的一次性类型:Microsoft.SharePoint.SPWeb
***这可能是误报,具体取决于类型的创建方式或是否在当前范围之外处置更多信息: http://blogs.msdn.com/rogerla/archive/2008/02/12/sharepoint-2007-and-wss-3-0-dispose-patterns-by-example.aspx#SPDisposeCheckID_140
我想要做的是让SPDispose工具忽略此错误,所以我已经将SPDisposeCheckIgnore类和支持枚举拉入我的项目中,并且我已经适当地修饰了我的方法:
[SPDisposeCheckIgnore(SPDisposeCheckID.SPDisposeCheckID_140, "RootWeb does not need disposed.")]
public static void RemoveWebPartFiles(SPFeatureReceiverProperties properties, string assemblyName)
{
...
}
完成所有这些后,我仍然收到错误。任何人都知道如何摆脱这个错误?
答案 0 :(得分:2)
这里有两件事需要做。
1)必须在SPDisposeCheck命名空间中定义SPDisposeCheckIgnore类。您不能拥有自己的命名空间。请参阅此页面上的相关评论:http://archive.msdn.microsoft.com/SPDisposeCheck/
2)您在RunWithElevatedPrivleges中尝试忽略的任何内容都必须被拉入外部方法,否则将无法识别。这不是在上面的例子中完成的,而是在其他地方完成的。
必须遵循这两条规则才能忽略工作。希望这有助于其他人在路上。
答案 1 :(得分:0)
仔细检查您检索和分配RootWeb
对象的方式。如果是在外部方法中完成,则DisposeChecker
可能不会认为它是RootWeb
引用。
答案 2 :(得分:0)
我没有看到你写的东西有什么问题。我将root网络变成静态方法,所以我只需要在一个地方忽略这个错误,it works in anonymous delegates。以下对我有用:
public class DisposeUtils
{
[SPDisposeCheckIgnore(SPDisposeCheckID.SPDisposeCheckID_140, "RootWeb does not need disposed. http://blogs.msdn.com/b/rogerla/archive/2009/11/30/sharepoint-2007-2010-do-not-dispose-guidance-spdisposecheck.aspx")]
public static SPWeb GetRootWeb(SPSite site)
{
return site.RootWeb;
}
}
抱歉,我不确定这是否有帮助 - 我说你的代码应该有效。您是否检查过SPDisposeCheck以查看它如何处理'Documented'和'Undocumented'错误? (我从来没有完全清楚这些设置是做什么的)