Visual Studio не копирует зависимости | Не удалось загрузить файл или сборку - PullRequest
0 голосов
/ 14 ноября 2018

Я пишу библиотеку классов для абстрагирования функций базы данных нашей компании, но когда код доходит до создания экземпляра одного из моих объектов базы данных, мы получаем:

Исключение 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.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Я помню, что сталкивался с той же проблемой, я думаю, это было связано с новой моделью ссылок Nuget. Попробуйте добавить отсутствующий пакет nuget непосредственно в проект WinForms . Это далеко от идеального решения, но оно должно работать.

Надеюсь, это поможет!

0 голосов
/ 14 ноября 2018

Visual Studio не копирует зависимости |Не удалось загрузить файл или сборку

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

В PackageReference отсутствует копия, скопировать файлы в функцию вывода

Чтобы решить эту проблему, попробуйте следующий обходной путь:

<PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

Надеюсь, это поможет.

...