Развертывание ASP.NET Core 1.1.0 и Entity Framework Core 1.1: невозможно загрузить сборку system.Collections.Immutable, Version = 1.1.37.0

Я перенес свой проект на ASP.NET Core 1.1.0 и Entity Framework Core 1.1, и все работает нормально в разработке.

Но невозможно развернуть проект в стадии постановки, у меня такая ошибка из журналов stdout:

Исключение при запуске приложения: System.IO.FileLoadException: невозможно установить сборку Microsoft.Extensions.DependencyInjection.Abstractions, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = adb9793829ddae60 'или не зависит от зависимостей. Определение проекта манифеста сборки не должно соответствовать па… точке сборки. (Exception de HRESULT: 0x80131040) Номинальное значение: 'Microsoft.Extensions.DependencyInjection.Abstractions, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = adb9793829ddae60'
… Agata.Presentation.Web.Startup.ConfigureServices (сервисы IService ) --- Fin de la trace de la pile… partir de l'emplacement pr‚c‚dent au niveau duquel l'exception a ‚t‚ lev‚e ---… System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () … Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices (службы IServiceCollection)… Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices ()… Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication ()

Я проверил все пакеты nuget из всех проектов, содержащихся в решении, и все зависимости обновлены.

Я удалил весь промежуточный каталог и полностью развернул его, чтобы убедиться, что в нем нет старых dll, но ошибка все еще здесь. Я также перезапускаю пул IIS и веб-сайт несколько раз.

На сервере установлен .NET Core 1.1.0.

Кто-нибудь знает, что здесь происходит?

РЕДАКТИРОВАТЬ: это мой project.json:

 "dependencies": {
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.2",
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview3-final",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": "1.0.0-preview3-final",
    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": "1.0.0-preview3-final",
    "Npgsql": "3.1.6",
    "Remotion.Linq": "2.1.1",
    "Serilog.Sinks.RollingFile": "3.2.0",
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.StaticFiles": "1.1.0",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.1.0",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.1.0",
    "Microsoft.Extensions.Configuration.Binder": "1.1.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.Extensions.Logging.Debug": "1.1.0",
    "Serilog.Extensions.Logging": "1.3.0",
    "Microsoft.AspNetCore.Authentication.Cookies": "1.1.0",
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.Extensions.Logging": "1.1.0",
    "Microsoft.EntityFrameworkCore": "1.1.0",
    "System.Interactive.Async": "3.1.0",
    "Microsoft.Extensions.DependencyInjection.Abstractions": "1.1.0",
    "Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final"
  },

  "tools": {
    "Microsoft.Extensions.SecretManager.Tools": "1.1.0-preview4-final",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": "1.1.0-preview4-final"
  },

РЕДАКТИРОВАТЬ: теперь проблема в другом, теперь ошибка:

Исключение при запуске приложения: System.IO.FileLoadException: невозможно зарядить сборку System.Interactive.Async, Version = 3.0.0.0, Culture = нейтральный, PublicKeyToken = 94bc3704cddfc263 'или не зависит от этих зависимостей. Определение проекта манифеста сборки не должно соответствовать па… точке сборки. (Exception de HRESULT: 0x80131040) Nom de fichierÿ: 'System.Interactive.Async, Version = 3.0.0.0, Culture = нейтральный, PublicKeyToken = 94bc3704cddfc263'… Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServiceCore.Infrastructure. .Infrastructure.EntityFrameworkServiceCollectionExtensions.AddEntityFramework (IServiceCollection serviceCollection) ... Microsoft.EntityFrameworkCore.Infrastructure.RelationalServiceCollectionExtensions.AddRelational (услуги IServiceCollection) ... Microsoft.Extensions.DependencyInjection.SqlServerServiceCollectionExtensions.AddEntityFrameworkSqlServer (услуги IServiceCollection) ... Agata.Presentation.Web.Startup.ConfigureServices (IServiceCollection services) в C: \ Workspace \ PerformancesEtControles \ Agata \ DevLot1 \ Presentation \ Agata.Presentation.Web \ Startup.cs: ligne 65 --- Fin de la trace de la pile… partir d e l'emplacement pr‚c‚dent au niveau duquel l'exception a ‚t‚ lev'e ---… System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()… Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices (IServiceCollection services )… Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices ()… Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication ()

Это мой обновленный project.json:

 "dependencies": {
    "Npgsql": "3.1.6",
    "Remotion.Linq": "2.1.1",
    "Serilog.Sinks.RollingFile": "3.2.0",
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.StaticFiles": "1.1.0",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.1.0",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.1.0",
    "Microsoft.Extensions.Configuration.Binder": "1.1.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.Extensions.Logging.Debug": "1.1.0",
    "Serilog.Extensions.Logging": "1.3.0",
    "Microsoft.AspNetCore.Authentication.Cookies": "1.1.0",
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.Extensions.Logging": "1.1.0",
    "Microsoft.EntityFrameworkCore": "1.1.0",
    "Microsoft.Extensions.DependencyInjection.Abstractions": "1.1.0",
    "Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final",
    "System.Interactive.Async": "3.1.0"
  },

  "tools": {
    "Microsoft.Extensions.SecretManager.Tools": "1.1.0-preview4-final",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": "1.1.0-preview4-final"
  },

Строка 65 моего файла запуска:

services.AddEntityFrameworkSqlServer().AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MyDbConnectionString")));

Он все еще отлично работает при отладке с помощью Visual Studio ...

РЕДАКТИРОВАТЬ 2: я решил, что System.Interactive.Async обновляет пакет Serilog.Extensions.Logging ... Теперь у меня есть ошибка:

System.IO.FileLoadException: невозможно получить сборку System.Collections.Immutable, версия = 1.1.37.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или не зависит от этого. Определение Trouvée du Manfeste de l'assembly не соответствует pas à la rérence de l'assembly. (Exception de HRESULT: 0x80131040) Номинальное значение: 'System.Collections.Immutable, Version = 1.1.37.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a'
Microsoft.AspNetCore.Mvc.Razor.Internal.RagerazorReferenceMan (ApplicationPartManager partManager, IOptions`1 optionsAccessor) --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---

Я просто схожу с ума от этого развертывания ...

РЕШЕНИЕ: разверните файл конфигурации исполняемого файла веб-приложения, который содержит привязки зависимостей библиотеки классов.


person AdrienTorris    schedule 18.11.2016    source источник
comment
Если кто-то может создать тег asp.net-core-1.1 и отметить мой вопрос, у меня недостаточно репутации для этого. Благодарность   -  person AdrienTorris    schedule 18.11.2016
comment
Покажите свой Project.json   -  person M. Wiśnicki    schedule 18.11.2016
comment
Вы должны использовать Microsoft.Extensions.DependencyInjection.Abstractions v 1.0.0, у других пакетов есть зависимости. Попробуй поменять.   -  person M. Wiśnicki    schedule 18.11.2016
comment
попробуйте открыть папку с вашим решением / пакетами и удалить все пакеты (оставьте файл repositories.config). Затем щелкните правой кнопкой мыши свое решение в VS и выберите restore packages   -  person Mike_G    schedule 18.11.2016
comment
@Adrien: Нет смысла иметь тег для каждой минорной версии, особенно в таких быстро развивающихся проектах, как ASP.NET Core, где каждые несколько месяцев ожидается выпуск новой версии.   -  person Tseng    schedule 18.11.2016


Ответы (1)


Решением было развернуть файл конфигурации исполняемого файла веб-приложения, который содержит некоторые привязки зависимостей библиотеки классов. Старая практика с .NET - никогда не развертывать файл .config, но эта практика, очевидно, требует пересмотра с .NET Core.

Когда вы публикуете свой веб-сайт, сгенерированный пакет содержит некоторый файл конфигурации, один из которых имеет то же имя, что и исполняемый файл вашего приложения, YourWebsiteNamespace.exe.config. Этот файл конфигурации содержит некоторые привязки dll и должен быть развернут вместе с вашим приложением.

Пример того, что может содержать этот файл:

<configuration>
  <runtime>
    <gcServer enabled="true" />
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="4.0.0.0" newVersion="4.1.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="1.1.37.0" newVersion="1.2.1.0" />
        <bindingRedirect oldVersion="1.2.0.0" newVersion="1.2.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="1.2.0.0" newVersion="1.4.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Xml.ReaderWriter" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <bindingRedirect oldVersion="4.0.0.0" newVersion="4.1.2.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="4.0.0.0" newVersion="4.0.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
person AdrienTorris    schedule 18.11.2016
comment
i @ Адриен, не могли бы вы уточнить? У меня точно такая же проблема. - person Beetlejuice; 20.11.2016
comment
@Beetlejuice добавил информацию. вы можете отменить свой голос против? - person AdrienTorris; 21.11.2016
comment
Откуда у вас эти конкретные версии dll? - person Beetlejuice; 21.11.2016
comment
Dll у кого есть привязки в этот конфигурационный файл? Я не добавлял их вручную, думаю, они были добавлены, когда я обновлял версию ASP.NET Core и Entity Framework Core в моем project.json (содержание в моем вопросе) - person AdrienTorris; 21.11.2016
comment
Я никогда не изменяю этот файл (webappnamespace.exe.config) и никогда не добавляю зависимость System.Collections.Immutable в свой проект - person AdrienTorris; 21.11.2016
comment
Может, мы по-другому издаем. Вот мой способ: sudo dotnet publish -c Release -o / var / www / myapp - person Beetlejuice; 21.11.2016
comment
Я не использую командную строку для публикации своего приложения. Я публикую в Visual Studio, затем вставляю сгенерированные файлы в каталог веб-сайта промежуточного сервера, за исключением настроек и файлов конфигурации (что было проблемой) - person AdrienTorris; 21.11.2016
comment
Прошло не менее 6 часов после обновления до aspnet core 1.1. Я понимаю сложность такой системы, но не понимаю, что это не работает из коробки: / - person Kevin; 11.12.2016