You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"
      }
    }
  }
}

验证步骤

  1. 清理项目:执行dotnet clean
  2. 恢复依赖:执行dotnet restore
  3. 重新发布:执行dotnet publish -c Release -r win-x64 --self-contained false
  4. 重新安装并启动服务,确认错误消失

内容的提问来源于stack exchange,提问作者Daniel Pomrehn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:55:19