#c# #.net #api #assembly
#c# #.net #API #.net-сборка
Вопрос:
Доброе утро.
Я разрабатываю веб-API с использованием Net 6.
Предварительная структура API показана на рисунке.
ContractGpdApi — это прямая сборка API. В нем есть ссылка на сборку ContractGpdApi.ServiceInterfaces. ContractGpdApi.ServiceInterfaces — это сборка, содержащая классы DTO (бизнес-модели) и интерфейсы служб. ContractGpdApi.ServiceImplementations — эта сборка содержит классы, реализующие интерфейсы сборки ContractGpdApi.ServiceInterfaces. Сборка адаптирует методы и классы сборки ContractGpdApi.DbServiceInterfaces в методы и классы сборки ContractGpdApi.ServiceInterfaces. Контракт Gp-dapi.DbServiceInterfaces — эта сборка содержит классы и интерфейсы уровня доступа к базе данных. ContractGpdApi.DbServiceImplementations — эта сборка содержит классы, реализующие интерфейсы сборки ContractGpdApi.DbServiceInterfaces. Сборка содержит ссылку на сборку ContractGpdApi.DbServiceInterfaces, а также ссылки на сборки microsoft.entityframeworkcore, microsoft.entityframeworkcore.sqlserver
В итоге я реализовал лестничный шаблон и разделил CUI на слабо связанные слои.
Уровень базы данных представлен двумя сборками: ContractGpdApi.DbServiceImplementations и ContractGpdApi.DbServiceInterfaces.
Рабочий уровень бизнеса представлен двумя сборками: ContractGpdApi.ServiceImplementations и ContractGpdApi.ServiceInterfaces.
Соответственно, assembly ContractGpdApi будет своего рода корневым каталогом, в который вы загружаете и внедряете зависимости, слабо связанные сборки.
При загрузке сборок возникают следующие ошибки:
- Не удалось загрузить файл или сборку «ContractGpdApi.DbServiceInterfaces, Версия=1.0.0.0, Культура=нейтральная, PublicKeyToken=null». Указанный файл не может быть найден.
- Не удалось загрузить файл или сборку » Microsoft.EntityFrameworkCore, Версия=6.0.0.0, Культура=нейтральная, PublicKeyToken=adb9793829ddae60′. Указанный файл не может быть найден.
Все остальные сборки загружаются нормально. Содержимое файла ContractGpdApi.csproj:
lt;Project Sdk="Microsoft.NET.Sdk.Web"gt; lt;PropertyGroupgt; lt;TargetFrameworkgt;net6.0lt;/TargetFrameworkgt; lt;/PropertyGroupgt; lt;ItemGroupgt; lt;PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" /gt; lt;/ItemGroupgt; lt;ItemGroupgt; lt;ProjectReference Include="..ContractGpdApi.ServiceInterfacesContractGpdApi.ServiceInterfaces.csproj" /gt; lt;/ItemGroupgt; lt;Target Name="PostBuild" AfterTargets="PostBuildEvent"gt; lt;Exec Command="call F:CopyingAssemblies.bat" /gt; lt;/Targetgt; lt;/Projectgt;
Содержимое файла CopyingAssemblies.bat:
xcopy /y "C:GitContractGpdApiContractGpdApi.DbServiceImplementationsbinDebugnet6.0*.dll" "C:GitContractGpdApiContractGpdApibinDebugnet6.0" xcopy /y "C:GitContractGpdApiContractGpdApi.ServiceImplementationsbinDebugnet6.0*.dll" "C:GitContractGpdApiContractGpdApibinDebugnet6.0"
Скажи мне, что я делаю не так?
Комментарии:
1. Возможно, вы захотите использовать
.net-assembly
тег вместоassembly
. Обязательно прочитайте описаниеassembly
тега.
Ответ №1:
Внесено изменение в код метода:
private static Assembly LoadAssembly(string assemblyName, bool skipOnError) { try { return Assembly.LoadFrom(assemblyName); //Old code: Assembly.LoadFile(assemblyName); } catch (Exception e) { if (!(skipOnError amp;amp; (e is FileNotFoundException || e is FileLoadException || e is BadImageFormatException))) { throw; } return null; } }
Это редактирование исправило только первую ошибку:
Не удалось загрузить файл или сборку «ContractGpdApi.DbServiceInterfaces, Версия=1.0.0.0, Культура=нейтральная, PublicKeyToken=null». Указанный файл не может быть найден.