Excepción de creación de instancias de SqlConnection en .NET 4.6 y versiones posteriores después de las actualizaciones de .NET Framework de August-September 2018

Se aplica a
.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

Síntomas

Después de instalar la versión preliminar de agosto del paquete acumulativo de actualizaciones de calidad o el 11 de septiembre de 2018, la actualización de .NET Framework, la instancia de SqlConnection puede producir una excepción.

El uso de un SqlConnection constructor puede conducir a un seguimiento de pila que se parece a la siguiente:

Nota

System.Runtime.Serialization.SerializationException
   at System.AppDomain.get_Evidence()
   at System.AppDomain.get_Evidence()
   at System.Configuration.ClientConfigPaths.GetEvidenceInfo(AppDomain appDomain, String exePath, String& typeName)
   at System.Configuration.ClientConfigPaths.GetTypeAndHashSuffix(AppDomain appDomain, String exePath)
   en System.Configuration.ClientConfigPaths.. ctor(String exePath, Boolean includeUserConfig)
   at System.Configuration.ClientConfigPaths.GetPaths(String exePath, Boolean includeUserConfig)
   at System.Configuration.ClientConfigurationHost.RequireCompleteInit(IInternalConfigRecord registro)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
   at System.Configuration.ConfigurationManager.GetSection(String sectionName)
   en System.Data.SqlClient.SqlConnection.. cctor()

Solución alternativa

Solución alternativa 1

Agregue las siguientes líneas en la configSection del archivo App.Config de la aplicación:

<section name="SqlColumnEncryptionEnclaveProviders"
type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection,
System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

Nota Si la aplicación no incluye un archivo de app.config, le recomendamos que cree e implemente un archivo de app.config que contenga esta información en configSection.

Si la solución alternativa 1 no funciona, pruebe la Solución alternativa 2.

Solución alternativa 2

Identifique un lugar en el dominio de la aplicación que se ejecute antes de que se agreguen objetos al contexto de llamada lógico. Agregue código para forzar que ConfigurationManager intente cargar una sección que no existe en ningún archivo de configuración. Por ejemplo:

System.Configuration.ConfigurationManager.GetSection("SectionNameThatDoesNotExistInAnyConfigurationFile");

Para obtener más información sobre este problema, vea el artículo de GitHub Mitigation: Deserialization of objects across app domains (Mitigación: deserialización de objetos entre dominios de aplicación).

Estado

Microsoft está investigando este problema y proporcionará una actualización en una próxima versión.