Исключение с MySqlConnector и NLog - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь подключить отличный MySqlConnector @ [Брэдли Грейнджер] к логгеру Nlog с помощью dotnet core 3.0 - мне нужны асинхронные возможности MySqlConnector.

Он работал нормально с MySql.Data, однако производительность намного лучше с MySqlConnector. Веб-приложение работает нормально без подключенного регистратора NLog, однако я получаю исключение при попытке использовать регистратор согласно инструкциям.

Я создал базовый веб-API (из шаблона VS) &не делайте ничего, кроме попыток присоединиться к регистратору и затем открыть соединение.

пакетов:

  • MySqlConnector 0.60.2
  • MySqlConnector.Logging.NLog 0.58. 0
  • NLog.Web.AspNetCore 4.9.0

nlog.config содержит:

    <target name="database" xsi:type="Database" >
      <connectionString>${gdc:item=connectionString}</connectionString>
      <commandText>
        insert into log (
...

Program.cs получает строку подключения и устанавливает ее для NLog:

DotEnv.Config();
string connectionString = "server=" + Environment.GetEnvironmentVariable("SQL_HOST") ...
GlobalDiagnosticsContext.Set("connectionString", connectionString);

Когда я добавляю MySqlConnectorLogManager.Provider = new NLogLoggerProvider(); в Startup.cs согласно readme и получаю метод .Open ()

var connection = new MySqlConnection(connectionString);
connection.Open();

, генерируется следующее исключение

System.TypeInitializationException: 'The type initializer for 'MySql.Data.MySqlClient.MySqlConnection' threw an exception.'

Inner Exception:
FileNotFoundException: Could not load file or assembly 'System.Data.SqlClient, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.

  StackTrace:
   at MySql.Data.MySqlClient.MySqlConnection.SetState(ConnectionState newState) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs:line 668
   at MySql.Data.MySqlClient.MySqlConnection.<OpenAsync>d__26.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs:line 292
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at MySql.Data.MySqlClient.MySqlConnection.Open() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs:line 280
   at WebApplication1.DataReaderHelper.ExecuteStoredProcedure(String procedureName)

есть идеи, пожалуйста?

1 Ответ

1 голос
/ 25 октября 2019

Вам необходимо установить <dbProvider> для цели базы данных.

например,

 <target name="database" xsi:type="Database" 
      dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" >

Дополнительные примеры в NLog Wiki

...