【问题标题】:KeyNotFoundException in Startup ConfigureServices AddMvc()启动 ConfigureServices AddMvc() 中的 KeyNotFoundException
【发布时间】:2018-11-11 13:47:55
【问题描述】:

自 30.05.2018 以来,我在 Startup.cs 中的 ASP.NET Core 代码

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.AddMvcCore(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" />

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。

标签: c# asp.net-core


【解决方案1】:

从几天前开始,我们也面临同样的问题。

我们还注意到我们和您都在使用 AspNetCore 1.1(一个相当旧的版本)。

凭直觉,我们更新到最新版本 (2.1) 并解决了我们的问题。

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题。此处概述了解决此问题的选项https://github.com/aspnet/Home/issues/3132

    对我来说,我选择在添加 MVC 之前添加 ApplicationPartManager 的选项,例如。

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

    Source

    【讨论】:

    • 谢谢,它解决了我的问题。
    • 什么是 Project1.Project1 类型的占位符?它似乎是特定于解决方案的,它应该指向什么
    • 这似乎也为我们解决了这个问题(没有 Project1 部分)。非常感谢!
    • 我忽略了带有“Project1.Project1Type”的部分。
    • 这对我也有用。有时我真的很后悔使用 ASP.NET 内核,因为这些古怪的东西。除了更新 Visual Studio 2017 之外,我没有对我的项目进行任何更改,这让我花了 45 分钟试图弄清楚发生了什么。微软需要齐心协力,这是不可原谅的。
    【解决方案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"
        },
    

    有趣的是,我们发现,如果我们回滚第二段,删除依赖项,Web 应用程序将启动并完全正常运行。所以如果你在紧急情况下这个

    进一步的解决尝试: - 从受影响的项目中清除未使用的依赖项(为 1 个构建工作,但奇怪的是再次开始失败 - 向代理池添加了一个新的 VS2017 构建代理,并用它来构建:也没有改变。

    我们还将尝试更多的想法,例如@Scott Willis 升级到 dotnet core 2.0

    干杯,

    标记

    【讨论】:

      【解决方案4】:

      我在切换到另一台机器时遇到了这个问题。我的 global.json 文件已损坏,我需要检索它。这就是它所包含的一切。它指向一个兼容的 sdk 版本:

      {
        "sdk": {
          "version": "2.0.3"
        }
      }
      

      替换 global.json 并构建它给了我一个缺少 sdk 的错误,并在命令提示符下运行以下命令确认它。

      dotnet --info
      

      我必须下载并安装 global.json 中提到的 .net core SDK 版本

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-01
        • 1970-01-01
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多