Я боролся с этим уже два дня. Я просмотрел inte rnet и перепробовал много разных вещей, но без посторонней помощи.
У меня есть автономное решение. NET Core 3.1 с примерно 4 проектами. Я создаю приложение на моем Windows рабочем столе. Когда я отправляю sh в BitBucket, мой конвейер запускается. Выглядит это так:
image: mcr.microsoft.com/dotnet/core/sdk
pipelines:
default:
- step:
caches:
- dotnetcore
script:
# Restore, Publish and Release the .NET core project
- dotnet restore
- dotnet publish ProjectsApi.sln -c Release -r centos.7-x64 -o "deployment" --self-contained
artifacts:
- deployment/**
- step:
script:
- pipe: atlassian/sftp-deploy:0.5.3
variables:
REMOTE_PATH: $FTP_REMOTE_PATH
USER: $FTP_USERNAME
SERVER: $FTP_HOST
LOCAL_PATH: $FTP_LOCAL_PATH
EXTRA_ARGS: $FTP_PORT
Сборка завершается успешно, и все отлично загружается на мой сервер Cent OS 7. Но когда я пытаюсь запустить приложение, я получаю следующее:
# ./ProjectApi.Api
Необработанное исключение. System.IO.FileLoadException: не удалось загрузить файл или сборку 'System.ComponentModel, версия = 4.0.4.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a'. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (0x80131040) Имя файла: 'System.ComponentModel, версия = 4.0.4.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a'
Следует отметить, что в какой-то момент я использовал System.ComponentModel. Я использовал это для аннотаций данных и получал ту же ошибку. Я удалил их и удалил пакет, просто чтобы посмотреть, исправит ли он проблему, но это не так. Когда пакет был добавлен, он использовал версию 4.3.0. Я даже попытался установить версию 4.0.4.0, просто чтобы посмотреть, поможет ли это, и получил ту же ошибку.
Я пытался заставить ее распознавать новую сборку, но это не сработало:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Я попытался удалить dll из папки развертывания и заменить его на тот, который я опубликовал со своего компьютера, но это не помогло вообще. У меня все вне идей. Я могу опубликовать sh решение, и оно отлично работает локально. Какие-нибудь мысли? Спасибо.