Я пишу библиотеку классов для абстрагирования функций базы данных нашей компании, но когда код доходит до создания экземпляра одного из моих объектов базы данных, мы получаем:
Исключение FileNotFound:
Не удалось загрузить файл или сборку 'MySql.Data,
Версия = 8.0.13.0, Культура = нейтральная, PublicKeyToken = c5687fc88969c44d 'или
одна из его зависимостей. Система не может найти указанный файл.
Зависимости MySql.Data, указанные на сайте:
- .NETStandard 2.0 Google.Protobuf (> = 3.5.1)
- System.Configuration.ConfigurationManager (> = 4.4.1)
- System.Security.Permissions (> = 4.4.1)
- System.Text.Encoding.CodePages (> = 4.4.0)
Но все они устанавливаются автоматически.
- Пакет NuGet: MySql.Data (8.0.13) (успешно устанавливается)
- Проект представляет собой библиотеку классов .NET Standard 2.0
- Нет ошибок компиляции или даже предупреждений; только что вышеприведенная ошибка во время выполнения.
просмотрел Не удалось загрузить файл или сборку или одну из ее зависимостей , которая рекомендует проверять, где зависимости не обнаружены - так я и сделал - но там не говорится, как исправить отсутствующую ссылку когда ты нашел где это?
Использование Process Monitor Мне удалось найти неудавшиеся вызовы DLL-операции CreateFile
, ссылающиеся на ...\TestingGUI\bin\Debug\MySql.Data\MySql.Data.dll
, которые, проверяя вручную, отсутствуют.
Проект, который запускается, представляет собой приложение WinForms, которое ссылается на другую библиотеку классов .NET Standard (по сути, на посредника), которая затем ссылается на библиотеку базы данных, которая зависит от MySql.Data.
При поиске по всему каталогу решений нет файлов MySql.Data.dll, особенно после полной сборки решения.
Вот мой файл csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<RootNamespace>App1.Database</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MySql.Data" Version="8.0.13" />
</ItemGroup>
</Project>
Итак, кто такой .NET Wizard?
UPDATE:
Получается, что код работает нормально при запуске из консольного приложения .Net Core, но имеет ошибку только при обращении из приложения .NET (в частности, winforms). Поэтому я отказался от графического интерфейса и просто использую консольное приложение .NET Core. Я думал, что .NET Standard совместим со всем, а может и нет? В любом случае, я оставлю здесь свой вопрос для всех, у кого возникли проблемы.
ОБНОВЛЕНИЕ 2:
Благодаря ответу @Itay Podhajcer нам удалось заставить его работать с .NET Winforms, также добавив туда пакет NuGet.