Инициализатор типа для System.Data.SqlClient.SqlConnection вызвал исключение. Windows server 2016 - PullRequest
0 голосов
/ 07 сентября 2018

На новом Windows Server 2016 мы получаем исключение, когда служба wcf пытается подключиться к базе данных (SQL Server 2017) с помощью Entity Framework. Тот же код работает на нескольких машинах.

The type initializer for 'System.Data.SqlClient.SqlConnection' threw an exception.  errordetails~ExceptionMessage - The type initializer for 'System.Data.SqlClient.SqlConnection' threw an exception. 
ExceptionSource - System.Data  
ExceptionTarget - Void .ctor()  
StackTrace - System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.SqlConnection' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.SqlConnectionFactory' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.SqlPerformanceCounters' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.Data.Common.ADP' threw an exception. ---> System.Security.VerificationException: Method System.Threading.Interlocked.CompareExchange: type argument 'System.Data.Res' violates the constraint of type parameter 'TException'.
   at System.Data.Res.GetLoader()
   at System.Data.Res.GetString(String name)
   at System.Data.Common.ADP..cctor()
   --- End of inner exception stack trace ---
   at System.Data.ProviderBase.DbConnectionPoolCounters..ctor(String categoryName, String categoryHelp)
   at System.Data.SqlClient.SqlPerformanceCounters..ctor()
   at System.Data.SqlClient.SqlPerformanceCounters..cctor()
   --- End of inner exception stack trace ---
   at System.Data.SqlClient.SqlConnectionFactory..ctor()
   at System.Data.SqlClient.SqlConnectionFactory..cctor()
   --- End of inner exception stack trace ---
   at System.Data.SqlClient.SqlConnection..cctor()
   --- End of inner exception stack trace ---
   at System.Data.SqlClient.SqlConnection..ctor()
   at System.Data.SqlClient.SqlClientFactory.CreateConnection()
   at System.Data.EntityClient.EntityConnection.GetStoreConnection(DbProviderFactory factory)
   at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
   at System.Data.EntityClient.EntityConnection..ctor(String connectionString)
   at System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)
   at System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName)
   at EntityDataAccessLayer.dbConnString..ctor()

Полный список внутренних исключений вверху:

StackTrace - System.TypeInitializationException: инициализатор типа для 'System.Data.SqlClient.SqlConnection' вызвал исключение. ---> System.TypeInitializationException: инициализатор типа для 'System.Data.SqlClient.SqlConnectionFactory' вызвал исключение. ---> System.TypeInitializationException: инициализатор типа для 'System.Data.SqlClient.SqlPerformanceCounters' вызвал исключение. ---> System.TypeInitializationException: инициализатор типа для 'System.Data.Common.ADP' вызвал исключение. ---> System.Security.VerificationException: метод System.Threading.Interlocked.CompareExchange: аргумент типа «System.Data.Res» нарушает ограничение параметра типа «TException».

1 Ответ

0 голосов
/ 07 сентября 2018

последняя ошибка: type argument 'System.Data.Res' violates the constraint of type parameter 'TException', что означает: она пыталась вызвать функцию с параметром, но функция не поддерживает его, с другой стороны, это означает: перегрузка или обновление потеряны, поэтому версии получили несоответствие в базовых рамках.

у вас есть варианты, чтобы понять это:

  1. Отладка по исходному коду: https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-debug-dotnet-framework-source?view=vs-2017
  2. Включить Funsion Log, чтобы получить информацию о сборке для проверки несоответствия: https://docs.microsoft.com/en-us/dotnet/framework/tools/fuslogvw-exe-assembly-binding-log-viewer
  3. Выполните команду dotnet , чтобы проверить, на какие версии ссылается ваш проект; некоторые сборки используют более высокие версии, если они не настроены строго.

Проблема похожа на эти 2 сообщения:

  1. https://github.com/schotime/NPoco/issues/425
  2. https://github.com/dotnet/corefx/issues/18406

Это часто случается, когда версии не совпадают.

Вы можете попробовать обновить все связанные пакеты, включая сами фреймворки.

Если базовая библиотека System.Data.SqlClient слишком старая, чтобы соответствовать последним версиям других пакетов, вам придется понизить версию других пакетов, которые есть в вашем проекте.

...