2018 .NET Framework 更新後,.NET 4.6 及以後版本的 SqlConnection 實例化異常 August-September

套用到
.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

症狀

在安裝 Quality Rollup 八月預覽版或 2018 年 9 月 11 日的 .NET Framework 更新後,SqlConnection 的實例化可能會拋出例外。

使用 SqlConnection 建構子可產生類似以下的堆疊追蹤:

注意

System.Runtime.Serialization.SerializationException
   在System.AppDomain.get_Evidence ()
   在System.AppDomain.get_Evidence ()
   at System.Configuration.ClientConfigPaths.GetEvidenceInfo (AppDomain appDomain, String exePath, String& typeName)
   at System.Configuration.ClientConfigPaths.GetTypeAndHashSuffix (AppDomain appDomain, String exePath)
   at System.Configuration.ClientConfigPaths..ctor (String exePath, Boolean includeUserConfig)
   at System.Configuration.ClientConfigPaths.GetPaths (String exePath, Boolean includeUserConfig)
   at System.Configuration.ClientConfigurationHost.RequireCompleteInit (IInternalConfigRecord record)
   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)
   at System.Data.SqlClient.SqlConnection..CCTOR ()

因應措施

因應措施 1

在應用程式 App.Config 檔案的 configSection 中加入以下幾行:

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

如果您的應用程式沒有包含 app.config 檔案,我們建議您在 configSection 中建立並部署包含此資訊的 app.config 檔案。

如果 Workaround 1 不行,就試試 Workaround 2。

解決方法 2

在應用程式領域中,找出在任何物件加入邏輯呼叫上下文前就已執行的位置。 新增程式碼強制 ConfigurationManager 嘗試載入一個設定檔中不存在的區段。 例如:

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

欲了解更多相關資訊,請參閱 GitHub 文章 《緩解措施:跨應用域物件的反序列化》。

狀態

Microsoft 正在研究這個問題,並會在即將推出的版本中提供更新。