Исключение экземпляра SqlConnection в .NET 4.6 и более поздних версиях August-September 2018 платформа .NET Framework обновлений

Применяется к
.NET Framework 4.6.2 .NET Framework 4.6.1 .NET Framework 4.6 .NET Framework 4.7 .NET Framework 4.7.1 .NET Framework 4.7.2

Проблема

После установки пакета исправлений за август или 11 сентября 2018 г. платформа .NET Framework обновления экземпляр SqlConnection может вызвать исключение.

Использование конструктора SqlConnection может привести к трассировке стека, которая выглядит следующим образом:

Примечание

System.Runtime.Serialization.SerializationException
   at System.AppDomain.get_Evidence()
   at System.AppDomain.get_Evidence()
   в System.Configuration.ClientConfigPaths.GetEvidenceInfo(AppDomain appDomain, String exePath, String& typeName)
   в System.Configuration.ClientConfigPaths.GetTypeAndHashSuffix(AppDomain appDomain, String exePath)
   в System.Configuration.ClientConfigPaths.. ctor(String exePath, boolean includeUserConfig)
   в System.Configuration.ClientConfigPaths.GetPaths(String exePath, boolean includeUserConfig)
   в system.Configuration.ClientConfigurationHost.RequireCompleteInit(запись IInternalConfigRecord)
   в System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   в system.Configuration.BaseConfigurationRecord.GetSection(String configKey)
   в System.ConfigurationManager.GetSection(String 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 Устранение рисков: десериализация объектов в доменах приложений.

Состояние

Корпорация Майкрософт изучает эту проблему и предоставит обновление в предстоящем выпуске.