2012-07-11 71 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