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

cas*_*ash 8 .net c# .net-core asp.net-core

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

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors();            
    services.AddControllers();
}
Run Code Online (Sandbox Code Playgroud)

现在我想将此设置移动到另一个项目,作为一个 Common dll,供数十个其他 ASP.NET Core 3.0 项目使用,所有这些项目都将通过调用 just 来执行启动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>
Run Code Online (Sandbox Code Playgroud)

以及以下课程:

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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下构建错误:

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

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

小智 8

我在 Asp .netcore 3.0 上得到了同样的结果。通过添加 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包解决了它。

  • 这实际上有帮助,但我很好奇 Newtonsoft.Json 如何影响“Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions”中的扩展方法? (2认同)

小智 5

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