Ошибка e_sqlite3 в установщике C#: причины и решение

    При разработке приложений на C# с использованием SQLite и Entity Framework разработчики часто сталкиваются с ситуацией, когда проект отлично работает в среде разработки (IDE), но после сборки установщика и установки на другой компьютер начинает выдавать ошибку System.DllNotFoundException: Unable to load DLL 'e_sqlite3'. В этой статье мы подробно разберём причины этой проблемы и предложим проверенные способы её решения.

    Почему возникает ошибка e_sqlite3 после установки?

    Ошибка DllNotFoundException для библиотеки e_sqlite3 указывает на то, что приложение не может найти нативную (неуправляемую) библиотеку SQLitePCL.raw, которая необходима для работы Microsoft.Data.Sqlite. В среде разработки (например, Visual Studio) все зависимости обычно копируются в выходную папку автоматически, но при создании установщика не все файлы могут быть включены в пакет.

    Основные причины:

    • Отсутствие нативных бинарников SQLite в установочном пакете - библиотеки e_sqlite3.dll (для Windows) или libe_sqlite3.so (для Linux) не включены в установщик.
    • Неверная архитектура сборки - проект скомпилирован под Any CPU, а на целевой машине нет соответствующей нативной DLL для 32-битной или 64-битной версии.
    • Отсутствие зависимостей Visual C++ Redistributable - нативная библиотека SQLitePCL.raw требует установленного пакета Visual C++ Redistributable на целевой машине.

    Как исправить ошибку e_sqlite3 в установщике C#?

    Существует несколько проверенных способов решения проблемы. Выберите подходящий в зависимости от вашего проекта.

    Способ 1: Убедитесь, что все файлы SQLitePCL.raw включены в установщик

    При создании установщика (например, с помощью Visual Studio Installer или WiX Toolset) необходимо явно указать, что все файлы из папки runtimes вашего проекта должны быть включены. Откройте файл проекта (.csproj) и проверьте наличие следующих строк:

    <ItemGroup>
      <Content Include="runtimes\**\*">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
    </ItemGroup>

    Это гарантирует, что все нативные библиотеки для всех платформ будут скопированы в выходную папку и затем включены в установщик.

    Способ 2: Используйте пакет SQLitePCLRaw.bundle_green

    Вместо стандартной сборки SQLitePCL.raw рекомендуется установить пакет SQLitePCLRaw.bundle_green через NuGet. Этот пакет включает в себя все необходимые нативные библиотеки для разных платформ (Windows, Linux, macOS) и автоматически подгружает их. После установки пакета пересоберите проект и создайте установщик заново.

    Способ 3: Ограничьте целевую платформу

    Если ваше приложение предназначено только для 64-битных систем Windows, измените целевую платформу в настройках проекта с Any CPU на x64. Это упростит процесс развёртывания, так как потребуется только одна нативная библиотека. После изменения платформы пересоберите проект и создайте установщик.

    Способ 4: Установите Visual C++ Redistributable на целевую машину

    Нативная библиотека e_sqlite3 зависит от Visual C++ Redistributable. Убедитесь, что на компьютере, где возникает ошибка, установлен соответствующий пакет (например, Visual C++ Redistributable for Visual Studio 2015-2022). Вы можете включить его в установщик как предварительное условие.

    Что делать, если ошибка остаётся?

    Если после применения всех способов ошибка сохраняется, выполните следующие шаги:

    • Проверьте журнал событий Windows (Event Viewer) на наличие дополнительных сведений о сбое загрузки DLL.
    • Убедитесь, что файл e_sqlite3.dll действительно присутствует в папке установки приложения (обычно в подпапке runtimes\win-x64\native\).
    • Попробуйте использовать другой провайдер SQLite, например, System.Data.SQLite (пакет NuGet System.Data.SQLite.Core), который не требует SQLitePCL.raw.
    • Обновите все NuGet-пакеты до последних версий: Microsoft.Data.Sqlite, SQLitePCLRaw.bundle_green, Microsoft.EntityFrameworkCore.Sqlite.

    Ошибка e_sqlite3 - распространённая проблема при развёртывании приложений на C# с SQLite. В большинстве случаев она решается правильной настройкой установщика и включением всех нативных зависимостей. Следуйте приведённым рекомендациям, и ваше приложение будет работать корректно на любом компьютере.

    Часто задаваемые вопросы