Как устранить ошибку «Could not load file or assembly 'System.Data.SqlClient'» при запуске .NET-приложения?

При запуске приложения на .NET возникает ошибка: <br/>Could not load file or assembly "System.Data.SqlClient".<br/>Я работаю с MySQL, а не с SQL Server — как это исправить?
  • 6 мая 2026 г. 7:00
Ответы на вопрос 1
Коротко — ошибка означает, что где‑то в приложении (в коде или в конфигурации) запрошен провайдер/сборка System.Data.SqlClient (MS SQL), а у вас используется MySQL. Надо убрать ссылку на SqlClient и подключить/настроить MySQL‑провайдер. Что конкретно делать — шаги ниже.

1) Найдите, кто просит System.Data.SqlClient
- Посмотрите стек ошибки — откуда делается вызов (путь, класс).
- Поиск по проекту: ищите "System.Data.SqlClient", "SqlConnection", "SqlCommand", "providerName=\"System.Data.SqlClient\"" в .cs, .config, .csproj, packages.config, .sln.
- Если не нашли — смотрите зависимости NuGet пакетов: какой‑то пакет может ссылаться на SqlClient.

2) Исправьте код (если вы используете классы ADO.NET)
- Если в коде используются SqlConnection/SqlCommand — они для MS SQL и не работают с MySQL. Замените на MySQL‑классы, например:
  - Для Oracle‑поддерживаемого коннектора (MySQL Connector/NET): using MySql.Data.MySqlClient; MySqlConnection, MySqlCommand.
  - Или используйте MySqlConnector (рекомендуемый сторонний) — MySqlConnector.MySqlClient.MySqlConnection.
Пример:
  using MySql.Data.MySqlClient;
  using (var conn = new MySqlConnection(connString)) { conn.Open(); ... }

3) Проверьте connectionString / providerName в конфиге
- В app.config/web.config замените providerName="System.Data.SqlClient" на providerName="MySql.Data.MySqlClient" (или на имя провайдера вашего пакетa).
Пример:
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Server=localhost;Database=test;Uid=root;Pwd=pass;" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>

4) Установите нужный MySQL‑провайдер (NuGet)
- MySql.Data (официальный Oracle Connector/NET):
  dotnet add package MySql.Data
- Или альтернативный, часто рекомендуемый и быстрее — MySqlConnector:
  dotnet add package MySqlConnector
- Для EF6: MySql.Data.Entity (или соответствующий пакет от Oracle)
- Для EF Core: Pomelo.EntityFrameworkCore.MySql или MySql.EntityFrameworkCore (в зависимости от нужной версии)

5) Если используется DbProviderFactories / EF — зарегистрируйте провайдера
- В .NET Framework провайдер можно прописать в machine.config/web.config.
- В .NET Core регистрация фабрики делается в коде:
  DbProviderFactories.RegisterFactory("MySql.Data.MySqlClient", MySqlClientFactory.Instance);

- Для Entity Framework 6 добавьте провайдер в секцию entityFramework (если нужно).

6) Когда всё же нужна System.Data.SqlClient
- Если по ошибке всё-таки нужен сам SqlClient (например, сторонняя библиотека требует его), можно установить пакет:
  dotnet add package System.Data.SqlClient
  или для .NET Core/5+ использовать Microsoft.Data.SqlClient (новый клиент) и/или System.Data.SqlClient пакет (в зависимости от совместимости).
Но в вашем случае это костыль — правильнее перенастроить на MySQL.

7) Диагностика, если ошибка остаётся
- Используйте Fuslogvw (Assembly Binding Log Viewer) или логи runtime для просмотра попыток загрузки сборок.
- Убедитесь, что все сборки и пакеты восстановлены и опубликованы вместе с приложением (особенно при деплое).
- Проверьте target framework: некоторые пакеты несовместимы с .NET Core/.NET 5+ без альтернатив.

Резюме
- Ошибка появляется потому, что где‑то явно запрашивается провайдер для MSSQL. Замените в коде/конфиге этот запрос на MySQL‑провайдер и установите соответствующий NuGet‑пакет (MySql.Data или MySqlConnector). Если нужно — зарегистрируйте провайдера для DbProviderFactories/EF.

Если хотите, пришлите фрагмент стека ошибки и/или содержимое connectionStrings и пример кода, и я подскажу точнее, что нужно изменить.
Похожие вопросы