Luk*_* Vo 14 .net c# configuration windows-services .net-6.0
我在这里遇到一个奇怪的问题。我创建了一个 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();
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,IntelliSense 似乎认识到( 的实例)Configuration中存在属性。servicesIServiceCollection
但是,代码无法编译并出现以下错误:
“IServiceCollection”不包含“Configuration”的定义,并且找不到接受“IServiceCollection”类型的第一个参数的可访问扩展方法“Configuration”(您是否缺少 using 指令或程序集引用?)
我缺少什么包裹?我的项目目前有:
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
Run Code Online (Sandbox Code Playgroud)
Luk*_* Vo 22
似乎是一个 IntelliSense bug,我报告了它这里 在 VS 开发者社区 这里。如果您遇到同样的问题,请点赞。
看起来 IntelliSense 似乎被其他过载搞糊涂了。事实上,IServiceCollection没有Configuration属性,但HostBuilderContext有。
ConfigureServices有另一个公开两个参数的重载。这解决了问题:
// Add ctx parameter
.ConfigureServices((ctx, services) =>
{
var settings = new ScriptOptions();
ctx.Configuration.Bind(settings);
services.AddHostedService<WindowsBackgroundService>();
})
Run Code Online (Sandbox Code Playgroud)
Cli*_*ein 17
只需安装 nuget 包“Microsoft.Extensions.Options.ConfigurationExtensions”即可解决问题,它具有“Configure”扩展方法。
| 归档时间: |
|
| 查看次数: |
14076 次 |
| 最近记录: |