Проблема
После установки пакета исправлений за август или 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 Устранение рисков: десериализация объектов в доменах приложений.
Состояние
Корпорация Майкрософт изучает эту проблему и предоставит обновление в предстоящем выпуске.