Desidero postare questo, anche se l'ho capito mentre stavo scrivendo la domanda. Pubblicheremo la risposta qui sotto.Analisi codice Avviso CA2213 - Chiamata Dispose() su campo di supporto IDisposable
Ottenere il seguente avviso con VS analisi del codice:
Attenzione CA2213 'dbconn' contiene campo 'DBConn.k__BackingField' che è di tipo IDisposable: 'SqlConnection'. Cambia il metodo Dispose in "DBConn" per chiamare Dispose o Close in questo campo.
Ma il mio codice fa chiamare Dispose() sulla proprietà dbconn. Non è sul campo di supporto? Ho altre istanze come questa - dove sono disposto dove il compilatore non lancia questo avvertimento. Questo è il codice qui sotto:
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();
}
}
}
Quale versione di C# stai usando? Avresti un avvertimento _different_ del compilatore prima di C# 6 poiché devi fornire un setter per le proprietà automatiche. –
Questo è un [bug noto] (https://connect.microsoft.com/VisualStudio/feedback/details/1798055/code-analysis-rule-ca2213-disposablefieldsshouldbedisposed-doesnt-understand-read-only-auto-properties-being -disposed) in FxCop che verrà corretto in una versione futura. –