簡體   English   中英

CA2202 CA2215 HttpApplication處置基調用

[英]CA2202 CA2215 HttpApplication Dispose base call

我目前正在我正在分析的代碼上獲取CA2202請勿多次放置對象 )。 警告是指我重寫的HttpApplication.Dispose方法。 我知道IDispose.Dipose方法不應是虛擬的或被覆蓋,但這是Microsoft在HttpApplication類中實現IDispose.Dispose為虛擬的並且沒有提供受保護的虛擬Dispose方法的結果。

該警告似乎是在抱怨base.Dispose方法的調用。 我正在調用基本Dispose方法,以防基類需要關閉或處理任何對象。 還要懷疑,否則我可能最終會收到CA2215Dispose方法應調用基類dispose )警告。

有誰知道我為什么收到此警告(CA2202)以及如何處理?

我很想抑制它,但是MSDN文檔說它永遠不應該被抑制。

子類如下所示(為簡潔起見已被縮短,您可以假定_container字段已初始化):

public class MyHttpApplication : HttpApplication
{
    private bool _disposed;
    private IDisposable _container;

    public sealed override void Dispose()
    {
        if (_disposed)
            return;
        try
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        finally
        {
            //The following lines is what causes the CA2202 code analysis warning
            base.Dispose();
        }

    }

    protected virtual void Dispose(bool disposing)
    {
        if (_disposed)
            return;

        try
        {
            if (disposing && _container != null)
            {
                _container.Dispose();
            }
        }
        finally
        {
            _disposed = true;
        }
    }   
}

似乎沒有抑制的辦法是沒有出路的。 我的解決方案是將對base.Dispose()的調用放在Dispose(bool)方法內,然后禁止CA2215,為此, MSDN文檔說:“如果對base.Dispose的調用發生在以下位置,則可以從該規則中禁止警告。比規則檢查的呼叫級別更深。”

[SuppressMessage("Microsoft.Usage", "CA2215:Dispose methods should call base class dispose", Justification = "base.Dispose() is called from Dispose(bool)")]
public sealed override void Dispose()
{
    if (_disposed)
        return;
    Dispose(true);
    GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
    if (_disposed)
        return;

    try
    {
        if (disposing)
        {
            base.Dispose();
            if (_container != null)
            {
                _container.Dispose();
            }
        }
    }
    finally
    {
        _disposed = true;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM