2012-07-11 105 views
3

在我的SharePoint的代码,我有以下行:SPDispose忽略属性没有忽视

SPWeb web = site.RootWeb; //site is an SPSite object

当我重建我的项目并运行在组件上的SPDispose工具,我得到以下错误:


Module: Blah.SharePoint.Features.Core.dll Method: Blah.SharePoint.Features.Core.Helpers.FeatureDeploymentHelper.RemoveWebPartFiles(Microsoft.SharePoint.SPFeatureReceiverProperties,System.String) Statement: web := site.{Microsoft.SharePoint.SPSite}get_RootWeb() Source: C:\xxx\xxx\Main\Source\SharePoint\Features\Core\Helpers\FeatureDeploymentHelper.cs Line: 26

Notes: Disposable type not disposed: Microsoft.SharePoint.SPWeb
***This may be a false positive depending on how the type was created or if it is disposed outside the current scope More Information: 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) 
{ 
... 
} 

做了这一切之后,我仍然收到错误。任何人都知道如何去摆脱这个错误?

回答

2

需要在这里完成两件事情。

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

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

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

0

仔细检查您如何检索并指定RootWeb对象。如果它是用外部方法完成的,则DisposeChecker可能不会提及它是RootWeb参考。

0

我没有看到你写的东西有什么问题。我拿出根网站到一个静态的方法,所以我只需要在一个地方忽略这个错误,并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以了解它如何处理“已记录”和“未记录”错误? (我从来没有完全清楚这些设置的作用)

+0

我试过这个以及...仍然没有骰子。我将在本周末推出一些示例代码,看看我是否无法完成这项工作。感谢您查看这个。 – 2012-07-13 18:26:51