3

在我的 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\Source\SharePoint\Features\Core\Helpers\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)
{ 
...
}

完成所有这些操作后,我仍然收到错误消息。任何人都知道我可能会如何摆脱这个错误?

4

3 回答 3

2

这里需要做两件事。

1) SPDisposeCheckIgnore 类必须在 SPDisposeCheck 命名空间中定义。您不能拥有自己的命名空间。请参阅此页面上的相关评论:http: //archive.msdn.microsoft.com/SPDisposeCheck/

2) 您在 RunWithElevatedPrivileges 中尝试忽略的任何内容都必须拉入外部方法,否则将无法识别。在上面的示例中没有这样做,但在其他地方正在这样做。

必须遵循这两个规则才能忽略工作。希望这可以帮助其他人。

于 2012-07-16T03:48:48.110 回答
0

仔细检查您如何检索和分配RootWeb对象。如果它是在外部方法中完成的,则DisposeChecker可能不会发现它是一个RootWeb参考。

于 2012-07-12T17:38:21.917 回答
0

我看不出你写的有什么问题。我将根 web 提取到一个静态方法中,所以我只需要在一个地方忽略这个错误,它就可以在匿名委托中工作。以下对我有用:

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 以了解它如何处理“已记录”和“未记录”错误?(我从来没有完全清楚这些设置的作用)

于 2012-07-13T16:29:46.907 回答