症状
8 月质量汇总预览或2018,9 月 11,.NET Framework 更新在安装后,SqlConnection 的实例化可能会引发异常。
使用 SqlConnection 构造函数可能会导致类似于下面的堆栈跟踪:
System.Runtime.Serialization.SerializationException 在 System.AppDomain.get_Evidence() 在 System.AppDomain.get_Evidence() 在 System.Configuration.ClientConfigPaths.GetEvidenceInfo (AppDomain appDomain,字符串 exePath 字符串和类型名称) 在 System.Configuration.ClientConfigPaths.GetTypeAndHashSuffix (应用程序域的应用程序域的字符串 exePath) 在 System.Configuration.ClientConfigPaths.ctor (exePath 字符串、 布尔型 includeUserConfig) 在 System.Configuration.ClientConfigPaths.GetPaths (exePath 字符串、 布尔型 includeUserConfig) 在 System.Configuration.ClientConfigurationHost.RequireCompleteInit (IInternalConfigRecord 记录) 在 System.Configuration.BaseConfigurationRecord.GetSectionRecursive (configKey、 布尔型 getLkg、 布尔型 checkPermission、 布尔型 getRuntimeObject、 布尔型 requestIsHere 的字符串对象和结果,对象和 resultRuntimeObject) 在 System.Configuration.BaseConfigurationRecord.GetSection (字符串 configKey) 在 System.Configuration.ConfigurationManager.GetSection (字符串 sectionName) 在 System.Data.SqlClient.SqlConnection.cctor()
解决办法
解决办法 1:
ConfigSection 应用程序的 App.Config 文件中添加以下行:
<section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
请注意如果您的应用程序中不包含一个 app.config 文件,我们建议您创建和部署的 app.config 文件包含此信息的 configSection 的。
如果解决方法 1 不起作用,请尝试解决办法 2。
解决办法 2
确定任何对象已添加到逻辑调用上下文之前运行的应用程序域中的位置。添加代码以强制 ConfigurationManager 尝试加载不存在任何配置文件中的节。例如:
System.Configuration.ConfigurationManager.GetSection("SectionNameThatDoesNotExistInAnyConfigurationFile");
有关此问题的详细信息,请参阅 GitHub 文章缓解: 跨应用程序域的对象的反序列化。
状态
Microsoft 正在研究此问题,并将提供在未来版本中的更新。