C# 代码分析警告CA2213-对IDisposable backing字段调用Dispose()

C# 代码分析警告CA2213-对IDisposable backing字段调用Dispose(),c#,visual-studio,visual-studio-2015,fxcop,c#-6.0,C#,Visual Studio,Visual Studio 2015,Fxcop,C# 6.0,虽然我在写问题的时候就知道了,但我还是想把这个贴出来。将在下面发布答案 通过VS代码分析获得以下警告: 警告CA2213“DBConn”包含IDisposable类型的字段“DBConn.k__BackingField:”SqlConnection“。将“DBConn”上的Dispose方法更改为此字段调用Dispose或Close 但是我的代码对DBConn属性调用Dispose()。它不在后场吗?我还有其他类似的例子——我正在处理编译器没有抛出此警告的情况。代码如下: using Syste

虽然我在写问题的时候就知道了,但我还是想把这个贴出来。将在下面发布答案

通过VS代码分析获得以下警告:

警告CA2213“DBConn”包含IDisposable类型的字段“DBConn.k__BackingField:”SqlConnection“。将“DBConn”上的Dispose方法更改为此字段调用Dispose或Close

但是我的代码对DBConn属性调用Dispose()。它不在后场吗?我还有其他类似的例子——我正在处理编译器没有抛出此警告的情况。代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;    

namespace TheProgramSpace
{
    public sealed class DBConn : IDisposable
    {
        // class containing the database and its connection
        public SqlConnection TheConn { get; }
        public string DbPath { get; }
        public string DbName { get; }


        public DBConn(ProgInstance FPI)
        {
            // constructs new SQLConnection            
            DbPath = FPI.dbPath;
            DbName = FPI.dbName;

            string connString = "Data Source = " + DbPath + "; Initial Catalog =" + DbName + "; Integrated Security = True; "
              + "Connect Timeout = 30; Encrypt = False; TrustServerCertificate = False; "
              + "ApplicationIntent = ReadWrite; MultiSubnetFailover = False";                     

            TheConn = new SqlConnection(connString);

        }

        public void Dispose()
        {            
            TheConn.Dispose();            
        }
    }
}

原因是,
conn
,因为它没有
访问器,所以是只读的。将属性声明更改为

public SqlConnection TheConn { get; private set; }

已解决问题。

您的代码没有问题<代码>处置将在基础支持字段上调用。这是FxCop中的一个例子,它是随着C#6中引入的“getter only”自动属性而出现的。现在,您可以在类上使用属性,也可以忽略它,直到它在FxCop中修复为止

你使用的是什么版本的C#?在C#6之前,您会收到不同的编译器警告,因为您必须为自动属性提供setter。这是FxCop中的一个错误,将在将来的版本中修复。指向MS的死链接Connect@timelmer谢谢-已修复。此问题尚未修复吗?