KeyNotFoundException в Startup ConfigureServices AddMvc()

Начиная с 30.05.2018 мой основной код ASP.NET в Startup.cs

public IServiceProvider ConfigureServices(IServiceCollection services)
{
   // Add services to the collection.
   services.AddMvc();
}

бросить исключение, как показано ниже:

Произошла ошибка при запуске приложения. KeyNotFoundException: данный ключ отсутствовал в словаре.

KeyNotFoundException: данный ключ отсутствовал в словаре. System.Collections.Generic.Dictionary.get_Item (ключ TKey) Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider + CandidateResolver.ComputeClassification (строковая зависимость) Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider + CandidateResolver.ComputeClassification (строковая зависимость) Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider + CandidateResolver.ComputeClassification (строковая зависимость) Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider + CandidateResolver.ComputeClassification (строковая зависимость) Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider + CandidateResolver + d__4.MoveNext() System. Linq.Enumerable + d__17.MoveNext() System.Linq.Enumerable + WhereSelectEnumerableIterator.MoveNext() Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.GetApplicationPartManager (службы IServiceCollection) Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcC (службы IServiceCollection). Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddMvc (службы IServiceCollection) MyWebApiProject.Startup.ConfigureServices (службы IServiceCollection) в Startup.cs System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() Microsoft.AspNetCore.Hosting.ConventionBasedStartup. ConfigureServices (службы IServiceCollection) Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices() Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()

csproj

<TargetFramework>net461</TargetFramework>

<ItemGroup>
<PackageReference Include="Autofac" Version="4.6.2" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.1.0" />
<PackageReference Include="EntityFramework" Version="6.2.0" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Server" Version="0.2.0-preview2-22683" />
<PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="1.0.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="5.1.5" />
<PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.0.61" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.4.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="1.0.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.1.5" />
<PackageReference Include="System.Net.Http" Version="4.3.3" />

Ответ 1

У меня были одни и те же проблемы. Варианты устранения этого изложены здесь https://github.com/aspnet/Home/issues/3132

Для меня я выбираю вариант добавления ApplicationPartManager перед добавлением MVC, например.

var manager = new ApplicationPartManager();
manager.ApplicationParts.Add(new AssemblyPart(typeof(Startup).Assembly));

services.AddSingleton(manager);
services.AddMvc();

Источник

Ответ 2

Мы столкнулись с тем же вопросом, что и несколько дней назад.

Мы также заметили, что и мы, и вы использовали AspNetCore 1.1 (довольно старая версия).

По подозрению, мы обновились до последней версии (2.1) и решили нашу проблему.

Ответ 3

Мы тоже сталкиваемся с тем же вопросом. Именно так мы выделили проблему: 1. Восстановление старой версии кода приводит к изменению XXXXX.deps.json в артефактах сборки.

 "compilationOptions": {
"defines": [
  "TRACE",
  "DEBUG",
  "NET461"
],

стала

"compilationOptions": {
"defines": [
  "TRACE",
  "DEBUG",
  "NETFRAMEWORK",
  "NET461"
],

А также

      "HealthBizModel/1.0.0": {
    "runtime": {
      "HealthBizModel.dll": {}
    }
  },
  "HealthBizService/1.0.0": {
    "dependencies": {
      "HealthBizModel": "1.0.0"
    },

Стал (раздел зависимостей - это то, что его нарушает)

  "HealthBizModel/1.0.0": {
    "dependencies": {
      "System.Runtime.Reference1": "4.0.20.0",
      "System.Net.Primitives.Reference1": "4.0.10.0",
      "System.Net.Http.WebRequest": "4.0.0.0"
    },
    "runtime": {
      "HealthBizModel.dll": {}
    }
  },
  "HealthBizService/1.0.0": {
    "dependencies": {
      "HealthBizModel": "1.0.0",
      "System.Text.Encoding.Reference1": "4.0.10.0"
    },

И что интересно, мы обнаружили, что если мы откатимся от второго сегмента, удалив зависимости, веб-приложение запустится и начнет работать нормально. Так что если вы в чрезвычайной ситуации, это

Дальнейшие попытки разрешения: - очистить неиспользуемые зависимости от реализованных проектов (сработал для 1 сборки, но странно начал сбой снова) - добавлен новый агент сборки VS2017 в пул агентов и построен с ним: также не изменился.

Мы также попробуем еще несколько таких идей, как модернизация @Scott Willis до ядра dotnet 2.0

Ура,

отметка