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

現象

2018 年 8 月の品質ロールアップのプレビューまたは 2018 年 9 月 11 日をインストールした後、更新.NET Framework、SqlConnection のインスタンス化によって例外がスローされる可能性があります。

SqlConnection コンストラクターを使用すると、次のようなスタック トレースが発生する可能性があります。

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)
   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)
   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 ファイルを作成してデプロイすることをお勧めします。

回避策 1 が機能しない場合は、回避策 2 を試してください。

回避策 2

論理呼び出しコンテキストにオブジェクトが追加される前に実行されるアプリ ドメイン内の場所を特定します。 ConfigurationManager に、構成ファイルに存在しないセクションの読み込みを強制するコードを追加します。 次に例を示します。

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

この問題の詳細については、GitHub の記事「 軽減策: アプリ ドメイン間でのオブジェクトの逆シリアル化」を参照してください。

状態

Microsoft はこの問題を調査しており、今後のリリースで更新プログラムを提供します。