Windows Server2019下.NET8 Worker Service启动遇EventLog平台不支持错误
解决Windows Worker Service启动时的EventLog PlatformNotSupportedException错误
问题分析
出现System.PlatformNotSupportedException: EventLog access is not supported on this platform.错误,核心原因有两点:
- 包版本不兼容:你使用了.NET 8.0的宿主组件,但
Microsoft.Extensions.Logging.EventLog引用了9.0.1版本(对应.NET 9),跨大版本引用会触发兼容性问题。 UseWindowsService()默认行为:即使调用ClearProviders(),该方法内部仍可能自动尝试添加EventLog日志提供程序,且配置顺序可能导致清除操作未生效。
解决方案
1. 统一包版本到.NET 8.0兼容版本
修改csproj文件,将所有Microsoft相关包的版本统一为8.0.x(与.NET 8.0匹配):
<Project Sdk="Microsoft.NET.Sdk.Worker"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <UserSecretsId>dotnet-MPNMService-1c14ff61-b30b-4cbf-9208-f54a2f3ebfe3</UserSecretsId> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.8" /> <PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.1" /> <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.1" /> <PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="8.0.8" /> <PackageReference Include="System.Diagnostics.DiagnosticSource" Version="8.0.1" /> </ItemGroup> </Project>
2. 调整主机配置顺序,禁用默认EventLog添加
将日志配置移到UseWindowsService()之前,并显式禁用Windows服务的默认日志行为:
Host.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); }) .UseWindowsService(options => { // 禁用Windows服务自动添加的EventLog日志提供程序 options.SuppressStatusMessages = true; }) .ConfigureServices(services => { services.AddHostedService<Worker>(); });
3. 清理配置文件中的EventLog残留配置
检查appsettings.json或appsettings.Production.json,如果存在以下EventLog相关配置,直接删除:
{ "Logging": { "EventLog": { "LogLevel": { "Default": "Information" } } } }
验证步骤
- 清理项目:执行
dotnet clean - 恢复依赖:执行
dotnet restore - 重新发布:执行
dotnet publish -c Release -r win-x64 --self-contained false - 重新安装并启动服务,确认错误消失
内容的提问来源于stack exchange,提问作者Daniel Pomrehn
相关产品推荐
相关产品推荐

