【问题标题】:'IServiceCollection' does not contain a definition for 'AddControllers'“IServiceCollection”不包含“AddControllers”的定义
【发布时间】:2020-04-02 23:45:15
【问题描述】:

我有一个 ASP.NET Core 3.0 项目运行良好,启动如下:

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

现在我想将此设置移动到另一个项目,作为通用 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 方法。

【问题讨论】:

  • AddControllers 是在 3.0 中添加的,但您在 .NET Standard 项目中使用的是 2.2。您不能针对 .NET Standard 使用 ASP.NET Core 3.0 组件 - ASP.NET Core 仅在 .NET Core 上运行。 docs 可能会有所帮助。
  • @KirkLarkin 谢谢。如果您将此评论转换为答案,我将能够将其标记为有帮助。
  • @Manpreet Kaur 回答有帮助,但我很好奇 Newtonsoft.Json 如何影响 Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions 中的扩展方法?

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


【解决方案1】:

我对 Asp .netcore 3.0 也有同样的看法。 通过添加 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包解决它。

【讨论】:

  • 这确实有帮助,但我很好奇 Newtonsoft.Json 如何影响 Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions 中的扩展方法?
  • 这也对我有用。我不知道为什么,但这是漫长的一天,我会接受的。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2016-09-25
    • 2020-08-20
    相关资源
    最近更新 更多