You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

.NET 6 Windows服务中ServiceBase类的支持性及无运行时异常原因问询

.NET 6 Windows服务中ServiceBase类的支持性及无运行时异常原因问询

嘿,我来给你捋清楚这个问题的关键,你完全不用焦虑——ServiceBase类在.NET 6的Windows平台上是完全受支持的,运行时没抛出异常才是正常表现。

咱们一步步拆解背后的逻辑:

  • 你反编译看到的那些抛出PlatformNotSupportedException的代码,其实是这个类库的跨平台通用实现。因为System.ServiceProcess.ServiceController.dll是按跨平台标准设计的,但Windows服务本身是Windows独有的功能,所以在非Windows系统上,这些方法就会抛出异常提示功能不支持。
  • 而在Windows平台上,.NET运行时会自动加载对应的Windows专属实现,这些实现里的构造函数、OnStartOnStop方法都是正常工作的业务逻辑,根本不会抛出异常。你反编译的只是通用版本的dll代码,并不是实际运行时执行的Windows平台专属代码。
  • 至于你在GitHub上看到的源码,其实里面包含了条件编译分支(比如带有#if WINDOWS的判断),你看到的是通用分支的代码,而Windows分支里的ServiceBase是有完整功能实现的,并没有那些异常抛出逻辑。

另外补充个小提示:在.NET 6及后续版本中,官方更推荐使用Microsoft.Extensions.Hosting.WindowsServices包来创建Windows服务,这是更现代化的开发方式,但传统的ServiceBase用法依然被兼容支持,不会被淘汰。

备注:内容来源于stack exchange,提问作者Jojo Peter

火山引擎 最新活动