“IServiceCollection”不包含“配置”的定义,即使 IntelliSense 另有建议

问题描述 投票:0回答:3

我这里遇到了一个奇怪的问题。我创建了一个 Worker 项目,以便按照此文档在 .NET 6 中创建 Windows 服务。我想从

appsettings.json
读取设置,所以我添加了以下代码:

IHost host = Host.CreateDefaultBuilder(args)
    .UseWindowsService(options =>
    {
        options.ServiceName = "My Service";
    })
    .ConfigureServices(services =>
    {
        var settings = new ScriptOptions(); // ScriptOptions is just a POCO class
        services.Configuration.Bind(settings);

        services.AddHostedService<WindowsBackgroundService>();
    })
    .Build();

如您所见,IntelliSense 似乎认识到

Configuration
中存在
services
属性(
IServiceCollection
的实例)。

但是,代码无法编译并出现此错误:

“IServiceCollection”不包含“Configuration”的定义,并且找不到接受“IServiceCollection”类型的第一个参数的可访问扩展方法“Configuration”(您是否缺少 using 指令或程序集引用?)

我缺少什么包裹?我的项目目前有:

    <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
    <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
c# .net configuration windows-services .net-6.0
3个回答
22
投票

似乎是一个 IntelliSense 错误,我在 VS 开发者社区报告了它。如果您遇到同样的问题,请点赞

看起来 IntelliSense 似乎因其他过载而感到困惑。事实上 IServiceCollection 没有

Configuration
属性,但 HostBuilderContext 有。

ConfigureServices
还有另一个公开两个参数的重载。这解决了问题:

    // Add ctx parameter
    .ConfigureServices((ctx, services) =>
    {
        var settings = new ScriptOptions();
        ctx.Configuration.Bind(settings);

        services.AddHostedService<WindowsBackgroundService>();
    })

15
投票

只需安装nuget包“Microsoft.Extensions.Options.ConfigurationExtensions” 它会解决问题,它有“配置”扩展方法。


0
投票

添加“Microsoft.Extensions.Options.ConfigurationExtensions”包。

在程序类中添加获取secret.json:

        var configuration = new ConfigurationBuilder().AddUserSecrets<Program>().Build();

或获取appsetting.json

var configuration = new ConfigurationBuilder().AddJsonFile(appsettings.json, optional: true, reloadOnChange: true).Build();

获取你的秘密:

configuration["ServiceBus:CONNECTION_STRING"];
© www.soinside.com 2019 - 2024. All rights reserved.