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

.NET 8中出现CS0118错误:'BackgroundService'是命名空间却被当作类型使用

解决Error CS0118: 'BackgroundService' is a namespace but is used like a type

问题根源

你的项目命名空间BackgroundService和Microsoft.Extensions.Hosting中的BackgroundService基类完全重名,编译器无法区分你要引用的是类型还是命名空间,这就是触发CS0118错误的核心原因。.NET 6未出现此问题是因为版本间命名解析规则的细微差异,而.NET 8的解析逻辑更严格,导致这个隐藏冲突被暴露。卸载重装NuGet包无效是因为问题不在依赖包本身,而是代码的命名冲突。

解决方案

方案1:修改项目命名空间(推荐)

直接修改命名空间为不重复的名称,从根源避免冲突:

using Microsoft.Extensions.Hosting;

namespace MyBackgroundService
{
    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;

        public Worker(ILogger<Worker> logger)
        {
            _logger = logger;
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                if (_logger.IsEnabled(LogLevel.Information))
                {
                    _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                }
                await Task.Delay(1000, stoppingToken);
            }
        }
    }
}

方案2:使用完全限定名指定基类

如果不想修改命名空间,通过完整命名空间明确指定要使用的基类:

using Microsoft.Extensions.Hosting;

namespace BackgroundService
{
    public class Worker : Microsoft.Extensions.Hosting.BackgroundService
    {
        private readonly ILogger<Worker> _logger;

        public Worker(ILogger<Worker> logger)
        {
            _logger = logger;
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                if (_logger.IsEnabled(LogLevel.Information))
                {
                    _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                }
                await Task.Delay(1000, stoppingToken);
            }
        }
    }
}

方案3:给基类起别名

通过using语句给BackgroundService类设置别名,区分同名的命名空间:

using HostBackgroundService = Microsoft.Extensions.Hosting.BackgroundService;

namespace BackgroundService
{
    public class Worker : HostBackgroundService
    {
        private readonly ILogger<Worker> _logger;

        public Worker(ILogger<Worker> logger)
        {
            _logger = logger;
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                if (_logger.IsEnabled(LogLevel.Information))
                {
                    _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                }
                await Task.Delay(1000, stoppingToken);
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:33:16