我需要将 .NET 6 控制台应用程序转换为服务。我按照 MS 的样板样本得出了这个:
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging.EventLog;
namespace MyService
{
internal class Program
{
static async Task Main(string[] args)
{
var host = Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureLogging(options =>
{
if (OperatingSystem.IsWindows())
{
options.AddFilter<EventLoggerProvider>(level => logLevel.Information);
}
})
.ConfigureServices(services =>
{
services
.AddHostedService<ServiceWorker>()
.Configure<EventLogSettings>(config => {
config.Name = "Application";
config.SourceName = "Service";
});
})
.Build();
await host.RunAsync();
}
}
}
这给了我这些错误:
“ILoggingBuilder”不包含“AddFilter”的定义,并且没有 可访问的扩展方法“AddFilter”接受第一个参数 可以找到类型“ILoggingBuilder”(您是否缺少使用 指令还是程序集参考?)
Program.cs(16,43,16,62):错误CS0246:类型或命名空间名称 找不到“EventLoggerProvider”Program.cs(16,33,16,63): 错误CS1061:“ILoggingBuilder”不包含定义 “AddFilter”并且没有可访问的扩展方法“AddFilter”接受 可以找到“ILoggingBuilder”类型的第一个参数
我无法在任何地方找到需要添加到已使用的 2x 项目/类之上的 nuget 包或程序集引用。我尝试了从所示版本到最新版本的所有版本,但仍然遇到相同的错误。
当你遇到这样的错误,并且你不知道特定函数来自哪个包时,你可以使用Microsoft api文档,在搜索字段中你可以写“AddFilter”,你可以找到你的方法以及它来自哪里:
Definition
Namespace:Microsoft.Extensions.Logging
Assembly:Microsoft.Extensions.Logging.dll
Package:Microsoft.Extensions.Logging v8.0.1
因此您必须添加 Microsoft.Extensions.Logging 包并在代码中添加 using