Проблема с копированием библиотек из NuGet пакетов при сборке библиотеки классов
Я пишу утилиту, работающую на .NET 6.0 для одной CAD системы(более свежие версии .NET она не принимает). При создании проекта выбрал шаблон "библиотека классов Майкрософт". Хотел добавить в свое приложение работу с бд, чтобы в ней хранить размеры из ГОСТа.
В качестве субд выбрал SQLite. Через Nuget Package Manager установил .nuget пакет System.Data.SQLite.Core. Запустил в режиме отладки программу, и при попытке подключиться к бд всплыло следующее исключение: System.IO.FileNotFoundException: 'Could not load file or assembly 'System.Data.SQLite, Version=1.0.119.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139'. Не удается найти указанный файл.'.
Я пытался понять, что не так, и вот что выяснил: если к проекту, который не является библиотекой классов Майкрософт, подключить .nuget пакеты, а затем его скомпилировать, то в папку Debug добавятся библиотеки, входящие в состав пакета:

Если же проект является библиотекой классов Майкрософт, то библиотеки из пакета почему - то не добавляются в папку вывода:

Как можно сделать так, чтобы при сборке библиотеки из пакета добавлялись в Debug?
Ответы (1 шт):
The
CopyLocalLockFileAssembliesproperty is useful for plugin projects that have dependencies on other libraries. If you set this property totrue, any transitive NuGet package dependencies are copied to the output directory. That means you can use the output ofdotnet buildto run your plugin on any machine.<PropertyGroup> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> </PropertyGroup>The default value of
CopyLocalLockFileAssembliescan vary based on the output type. For example, for class libraries the default value isfalse, while for console applications the default istrue. You can specify this property explicitly to override the default if needed.Alternatively, you can use
dotnet publishto publish the class library. For more information, see dotnet publish.
Вам нужно добавить в .csproj файл опцию
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
В качестве альтернативы, можно опубликовать библиотеку через меню Build -> Publish, чтобы получить готовую для использования в продакшне сборку. Файлы будут скопированы автоматически без дополнительных настроек.