SqlConnection.CacheConnectionStringProperties()的.NET代码中的NullReferenceException

Pav*_*l K 14 .net c# sqlconnection .net-4.7.2

我面临着非常奇怪的问题.鉴于以下代码:

static void Main()
{
    var c = new System.Data.SqlClient.SqlConnection();

    c.ConnectionString = "Data Source=SOME_NAME;Initial Catalog=SOME_DB;Integrated Security=True";
    c.ConnectionString = ""; //null also triggers exception

    Console.WriteLine("Success");
}
Run Code Online (Sandbox Code Playgroud)

它运行良好很长一段时间,但在最新版本的Windows 10(1803)上有.NET版本4.7.03056版本461808(似乎是4.7.2)它崩溃了以下异常:

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Data.SqlClient.SqlConnection.CacheConnectionStringProperties()
   at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
   at TestCacheConnectionStringProperties.Program.Main()
Run Code Online (Sandbox Code Playgroud)

这会在第二个任务中崩溃,如果我删除它的任何分配ConnectionString工作正常.

我查看了源代码并没有找到NullReferenceException可能发生的地方(但是.NET Framework 4.7.1似乎是源代码因此可能会改变).

现在问题是 - 导致这个问题的原因是什么?这是一个.NET错误吗?如果是 - 如何解决?

更新:根据评论 - 非常感谢伙计们 - 问题是由这些线引起的(反编译):

private void CacheConnectionStringProperties()
{
  SqlConnectionString connectionOptions = this.ConnectionOptions as SqlConnectionString;
  if (connectionOptions != null)
    this._connectRetryCount = connectionOptions.ConnectRetryCount;

  //Seems like this is causing the bug because it is not inside of null-check-if for connectionOptions variable
  if (this._connectRetryCount != 1 || !ADP.IsAzureSqlServerEndpoint(connectionOptions.DataSource))
    return;
  this._connectRetryCount = 2;
}
Run Code Online (Sandbox Code Playgroud)

它与Azure有某种关联,与源代码中的内容完全不同.

我在这里发布了这个问题并将等待回复.

小智 2

这是 .NET Framework 4.7.2 中 System.Data 中记录的已知问题 https://github.com/Microsoft/dotnet/blob/master/releases/net472/dotnet472-known-issues.md

该问题目前正在解决,并将在 .NET Framework 4.7.2 的未来更新中提供