Сбой AspNet Core WebApi при запуске с ошибкой System.Collections.Generic.KeyNotFoundException

Моя сборка была успешно собрана и развернута в кластере Azure. Задачи сборки VSTS

У меня нет изменений кода. Я сравнил рабочие и нерабочие артефакты сборки. У меня есть новые записи в моем файле MyCompany.MyService.Api.deps.json:

    ...
    "compilationOptions": {
        "defines": [
    ...
          "NETFRAMEWORK",
    ...
        ],
    ...
              "Microsoft.Bcl.Build": "1.0.21",
              "System.IdentityModel": "4.0.0.0",
              "System.ServiceModel.Web": "4.0.0.0",
              "System.Web.Services": "4.0.0.0",
              "System.Runtime.Caching": "4.0.0.0",
              "System.ServiceModel.Activation": "4.0.0.0"
            },
    ...
              "System.Transactions": "4.0.0.0",
              "System.Web": "4.0.0.0",
              "System.Diagnostics.Tracing.Reference1": "4.0.20.0",
              "System.Runtime.Serialization.Primitives.Reference": "4.0.10.0",
              "System.Runtime.Serialization.Xml.Reference": "4.0.10.0"
            },
    ...
          "System.Runtime.Reference1": "4.0.20.0",
          "System.Threading.Tasks.Reference1": "4.0.10.0",
          "System.Resources.ResourceManager.Reference1": "4.0.0.0",
          "System.Globalization.Reference1": "4.0.10.0",
          "System.Diagnostics.Tools.Reference1": "4.0.0.0",
          "System.Diagnostics.Debug.Reference1": "4.0.10.0",
          "System.Linq.Reference1": "4.0.0.0",
          "System.Collections.Reference1": "4.0.10.0",
          "System.Threading.Reference1": "4.0.10.0",
          "System.Runtime.Extensions.Reference1": "4.0.10.0",
          "System.IO.Reference1": "4.0.10.0",
          "System.Runtime.InteropServices.Reference1": "4.0.20.0",
          "System.Text.Encoding.Reference1": "4.0.10.0",
          "System.Reflection.Primitives.Reference1": "4.0.0.0",
          "System.Reflection.Reference1": "4.0.10.0",
          "System.Text.Encoding.Extensions.Reference1": "4.0.10.0",
          "System.ComponentModel.Reference": "4.0.0.0",
          "System.Reflection.Extensions.Reference1": "4.0.0.0"
...

Я успешно занимался сборкой и развертыванием в течение последних нескольких месяцев. Тем не менее, в течение последних 5 дней код, созданный на основе сборки VSTS, не может быть развернут в кластере. Моя служба API не запускается, и я получаю следующую ошибку. Пожалуйста, предложите, как я могу отладить. Код успешно развертывается и запускается в моем локальном кластере.

Unhealthy event: SourceId='System.RA', Property='ReplicaOpenStatus', HealthState='Warning', ConsiderWarningAsError=false.
Replica had multiple failures during open on _ntsfmain_0. API call: IStatelessServiceInstance.Open(); Error = System.Collections.Generic.KeyNotFoundException (-2146232969)
The given key was not present in the dictionary.
at System.ThrowHelper.ThrowKeyNotFoundException()
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)
at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)
at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)
at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.d__4.MoveNext()
at System.Linq.Enumerable.d__17`2.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.GetApplicationPartManager(IServiceCollection services)
at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(IServiceCollection services)
at Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddMvc(IServiceCollection services)
at MyCompany.MyService.Api.Startup.ConfigureDevelopmentServices(IServiceCollection services) in C:\agent_C\_work\19\s\Source\MyCompany.MyService.Api\Startup.cs:line 39
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
at MyCompany.MyService.Api.Api.<>c__DisplayClass4_0.b__1(String url, AspNetCoreCommunicationListener listener) in C:\agent_C\_work\19\s\Source\MyCompany.MyService.Api\Api.cs:line 91
at Microsoft.ServiceFabric.Services.Communication.AspNetCore.AspNetCoreCommunicationListener.OpenAsync(CancellationToken cancellationToken)
at Microsoft.ServiceFabric.Services.Runtime.StatelessServiceInstanceAdapter.d__19.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.ServiceFabric.Services.Runtime.StatelessServiceInstanceAdapter.d__13.MoveNext()
For more information see: http://aka.ms/sfhealth



Ответы (1)


Это известная ошибка, связанная с ядром asp.net 2.1. У нас была такая же проблема несколько недель назад.

Существуют некоторые конфликтующие зависимости при установке ядра 2.1, которые влияют на другие версии dot net. Вероятно, что среда сборки VSTS или SF были обновлены до ядра 2.1 и повлияли на ваши старые сборки.

Вы можете:

Понижение до 2.0. В нашем случае у нас были некоторые сервисы, предназначенные для ядра 2.1, а также некоторые 1.1 и 2.0. Мы понизили все сервисы до ядра 2.0, и проблема была решена.

Or,

Вы можете решить проблему с зависимостями, добавив следующий код перед строкой AddMvc() вашего API.

Будет выглядеть так:

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

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

Or,

Добавьте в решение файл global.json.

Как это:

{
  "sdk": {
    "version": "2.1.200"
  }
}

Пожалуйста, следуйте этим проблемам GitHub для получения дополнительной информации:

person Diego Mendes    schedule 20.07.2018
comment
Предложение на Git Hub и здесь решили мою проблему. Печально то, что я потратил 5 дней своего спринта на отладку этого. - person Datha; 23.07.2018
comment
Я разделяю то же чувство, что и вы, мы провели около недели, прежде чем обнаружили, что это проблема .NET. Пожалуйста, отметьте как выполненное, если это решило вашу проблему. Ваше здоровье! - person Diego Mendes; 23.07.2018