症狀
在安裝 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 正在研究這個問題,並會在即將推出的版本中提供更新。