do tnet 3.1 Определение манифеста обнаруженной сборки не соответствует ссылке на сборку - PullRequest
1 голос
/ 18 января 2020

Я боролся с этим уже два дня. Я просмотрел 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 решение, и оно отлично работает локально. Какие-нибудь мысли? Спасибо.

...