启动时的KeyNotFoundException配置服务AddMvc()

时间:2018-06-01 12:06:11

标签: c# asp.net-core

自2017年5月30日起,我的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 key)   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" />

4 个答案:

答案 0 :(得分:29)

我遇到了同样的问题。解决此问题的选项在此处列出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

答案 1 :(得分:2)

我们几天前也面临同样的问题。

我们也注意到我们和你们都在使用AspNetCore 1.1(相当旧的版本)。

在预感中,我们更新到最新版本(2.1)并解决了我们的问题。

答案 2 :(得分:0)

我们也面临同样的问题。这就是我们将问题隔离到以下几点: 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

干杯,

标记

答案 3 :(得分:0)

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

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

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

dotnet --info

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