SPDispose忽略属性而不是忽略

时间:2012-07-11 14:07:15

标签: asp.net sharepoint sharepoint-2010

在我的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)
{ 
...
}

完成所有这些后,我仍然收到错误。任何人都知道如何摆脱这个错误?

3 个答案:

答案 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'错误? (我从来没有完全清楚这些设置是做什么的)