Сообщение Customization with assembly от 12.04.2023 8:25
Изменено 12.04.2023 8:57 Berill
Столкнулся с проблемой при использовании linq2db.cli для генерации моделей данных.
Все делаю как описано тут (https://linq2db.github.io/articles/CLI.html).
Пробую вариант кастомизации с отдельным assembly. Создал отдельный проект библиотеки (TargetFramework netcoreapp3.1).
| Lib csproj | |
| |
Добавил "пустой" Interceptor
| Код | |
| |
Компиляция успешная, все нужные файлы в "bin\Debug\netcoreapp3.1" есть, включая DataModelsCustomization.deps.json. Идем дальше.
Создал консольное приложение, добавил Project Reference на библиотеку с кастомизациями.
| App csproj | |
| |
Создал каталог DataModels внутри проекта консольного приложения. Поместил туда database.json файл
| database.json | |
| |
В терминале выполняю команду:
D:\PROJECTS\Examples\Linq2Db.NetCore\Linq2Db.NetCore\DataModels> dotnet linq2db scaffold -i database.json --customize ..\bin\Debug\netcoreapp3.1\DataModelsCustomization.dllВ результате получаю ошибку:
AssemblyResolve path: D:\PROJECTS\Examples\Linq2Db.NetCore\Linq2Db.NetCore\bin\Debug\netcoreapp3.1
Unhandled exception: DependencyContext.Load cannot load interceptor assembly
at LinqToDB.CommandLine.ScaffoldCommand.SetupInterceptorsDependencyResolver(String assemblyFolder, Assembly interceptorsAssembly)
at LinqToDB.CommandLine.ScaffoldCommand.LoadInterceptorsFromAssembly(String assemblyPath, ScaffoldOptions options)
at LinqToDB.CommandLine.ScaffoldCommand.LoadInterceptors(String interceptorsPath, ScaffoldOptions options)
at LinqToDB.CommandLine.ScaffoldCommand.Execute(CliController controller, String[] rawArgs, Dictionary`2 options, IReadOnlyCollection`1 unknownArgs)
at LinqToDB.CommandLine.CliController.Execute(String[] args)
at LinqToDB.Tools.Program.Main(String[] args)
В каталоге "bin\Debug\netcoreapp3.1" нет только одного файла: DataModelsCustomization.deps.json.
Как только я его копирую вручную из каталога куда складывается результат сборки библиотеки "DataModelsCustomization\bin\Debug\netcoreapp3.1", все проходит успешно, модели генерируются. Пока что никак не могу найти способа его автоматического копирования при сборке проекта.
Пробовал добавлять "<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>" в файл проекта приложения, не помогло.
Можно конечно выполнить терминальную команду, находясь в каталоге библиотеки
D:\PROJECTS\Examples\Linq2Db.NetCore\DataModelsCustomization> dotnet linq2db scaffold -i database.json --customize bin\Debug\netcoreapp3.1\DataModelsCustomization.dllНо я хочу, чтобы модели данных были в проекте приложения. Или действительно надо генерировать модели в проекте с кастомизациями? В документации (https://linq2db.github.io/articles/CLI.html) об этом ничего не сказано.
Как вариант, еще можно добавить поле output в json файл.
Буду благодарен, если объясните что я делаю не так.
Столкнулся с проблемой при использовании linq2db.cli для генерации моделей данных.
Все делаю как описано тут (https://linq2db.github.io/articles/CLI.html).
Пробую вариант кастомизации с отдельным assembly. Создал отдельный проект библиотеки (TargetFramework netcoreapp3.1).
| Lib csproj | |
| |
Добавил "пустой" Interceptor
| Код | |
| |
Компиляция успешная, все нужные файлы в "bin\Debug\netcoreapp3.1" есть, включая DataModelsCustomization.deps.json. Идем дальше.
Создал консольное приложение, добавил Project Reference на библиотеку с кастомизациями.
| App csproj | |
| |
Создал каталог DataModels внутри проекта консольного приложения. Поместил туда database.json файл
| database.json | |
| |
В терминале выполняю команду:
D:\PROJECTS\Examples\Linq2Db.NetCore\Linq2Db.NetCore\DataModels> dotnet linq2db scaffold -i database.json --customize ..\bin\Debug\netcoreapp3.1\DataModelsCustomization.dllВ результате получаю ошибку:
AssemblyResolve path: D:\PROJECTS\Examples\Linq2Db.NetCore\Linq2Db.NetCore\bin\Debug\netcoreapp3.1
Unhandled exception: DependencyContext.Load cannot load interceptor assembly
at LinqToDB.CommandLine.ScaffoldCommand.SetupInterceptorsDependencyResolver(String assemblyFolder, Assembly interceptorsAssembly)
at LinqToDB.CommandLine.ScaffoldCommand.LoadInterceptorsFromAssembly(String assemblyPath, ScaffoldOptions options)
at LinqToDB.CommandLine.ScaffoldCommand.LoadInterceptors(String interceptorsPath, ScaffoldOptions options)
at LinqToDB.CommandLine.ScaffoldCommand.Execute(CliController controller, String[] rawArgs, Dictionary`2 options, IReadOnlyCollection`1 unknownArgs)
at LinqToDB.CommandLine.CliController.Execute(String[] args)
at LinqToDB.Tools.Program.Main(String[] args)
В каталоге "bin\Debug\netcoreapp3.1" нет только одного файла: DataModelsCustomization.deps.json.
Как только я его копирую вручную из каталога куда складывается результат сборки библиотеки "DataModelsCustomization\bin\Debug\netcoreapp3.1", все проходит успешно, модели генерируются. Пока что никак не могу найти способа его автоматического копирования при сборке проекта.
Пробовал добавлять "<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>" в файл проекта приложения, не помогло.
Можно конечно выполнить терминальную команду, находясь в каталоге библиотеки
D:\PROJECTS\Examples\Linq2Db.NetCore\DataModelsCustomization> dotnet linq2db scaffold -i database.json --customize bin\Debug\netcoreapp3.1\DataModelsCustomization.dllНо я хочу, чтобы модели данных были в проекте приложения. Или действительно надо генерировать модели в проекте с кастомизациями? В документации (https://linq2db.github.io/articles/CLI.html) об этом ничего не сказано.
Как вариант, еще можно добавить поле output в json файл.
Буду благодарен, если объясните что я делаю не так.
UPD:
Убрал Project Reference на библиотеку с кастомизацией и выполнил команду
dotnet linq2db scaffold -i database.json --customize ..\..\DataModelsCustomization\bin\Debug\netcoreapp3.1\DataModelsCustomization.dllМожет именно такая команда и имелась в виду в документации?!