У меня есть проект Visual Studio ASP.NET Core Web API, который в локальной среде разработчика восстанавливает, создает и запускает без проблем.
У меня есть конвейер TeamCity со следующими шагами:
.NET CLI Restore
.NET CLI Build
.NET CLI Publish
Конвейер работает без ошибок.
Опубликованный набор двоичных файлов развернут в IIS.
Исключение при запуске приложения:
FileLoadException: Could not load file or assembly 'Microsoft.Extensions.WebEncoders, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Я могуРешите эту проблему, добавив явную ссылку на пакет к .csproj:
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
Однако в следующий раз я получу другое исключение:
FileLoadException: Could not load file or assembly 'Microsoft.AspNetCore.StaticFiles, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
И так далее, как это работаетчерез дерево зависимостей.
Очевидно, что нереально повторять этот процесс до тех пор, пока все зависимости не будут явно указаны с помощью ссылок на пакеты.
При запуске на агенте сборки TeamCity MSBuild Publish выбирает другую версию сборкичем версия, требуемая во время выполнения.