“ IServiceCollection”不包含“ AddControllers”的定义

时间:2019-12-09 20:37:26

标签: c# .net asp.net-core .net-core

我有一个ASP.NET Core 3.0项目,在以下启动过程中运行良好:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors();            
    services.AddControllers();
}

现在,我想将此设置移至另一个项目,以用作Common dll,供其他数十个ASP.NET Core 3.0项目使用,其中所有这些项目都将仅通过调用services.Configure();来执行启动,考虑到Configure是我创建的扩展方法。

为此,我使用以下.csproj文件创建了另一个项目:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Cors" Version="2.2.0" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.2.0" />
  </ItemGroup>

</Project>

以及以下课程:

using System;
using Microsoft.Extensions.DependencyInjection;

namespace MyCommon.Extensions
{
    public static class MyIServiceCollectionExtensions
    {
        public static class IServiceCollectionExtensions
        {
            public static IServiceCollection Configure(this IServiceCollection services)
            {
                services.AddCors();
                services.AddControllers();
                return services;
            }
        }
    }
}

这给了我以下构建错误:

  

“ IServiceCollection”不包含“ AddControllers”的定义

由于我已经添加了Microsoft.AspNetCore.Mvc package,所以我不明白为什么找不到AddControllers方法。

2 个答案:

答案 0 :(得分:3)

我对Asp .netcore 3.0也有相同的看法。 通过添加Microsoft.AspNetCore.Mvc.NewtonsoftJson软件包来解决此问题。

答案 1 :(得分:2)

Services.AddControllers是在3.0内核中添加的,而不是在2.2中添加的,此外,由于序列化问题:Nuget,建议在使用.NET Core 3.0+时使用Newtonsoft.Json。