My objective is to run an ASP.NET Core 6 app as Windows service in the simplest way, which I understood to use the code shown below.
I have included both of these lines (though only the top should be necessary):
using Microsoft.AspNetCore.Hosting.WindowsServices;
using Microsoft.Extensions.Hosting.WindowsServices;
and installed the nuget packages:
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Hosting.WindowsServices" Version="6.0.0" />
But this code cannot resolve .UseWindowsService() when using IWebHostBuilder:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(Configuration)
.ConfigureServices(ConfigureServices)
.UseUrls(Configuration.GetBindHostUrl())
.UseStartup<Startup>()
.UseWindowsService(); // not found
The error I get is:
'IWebHostBuilder' does not contain a definition for 'UseWindowsService' and the best extension method overload 'WindowsServiceLifetimeHostBuilderExtensions.UseWindowsService(IHostBuilder)' requires a receiver of type 'IHostBuilder'
What am I missing here?
Instead of using the WebHost, you could try to use the more generic IHostBuilder:
var host = Host.CreateDefaultBuilder(args)
.UseWindowsService()
.UseSystemd()
.ConfigureWebHostDefaults(webbuilder =>
{
//Configure here your WebHost. For example Startup;
webbuilder.UseStartup<Startup>();
});
Edit:
Moved from the comments, because multiple people found it useful and to improve the visibility of the comment:
To use the UseWindowsService() method, you need to install the WindowsServices NuGet-Package. In some cases, it will build without the NuGet-Package, but it will fail to run!
I just migrated from .net 3 to latest 7.0 and VS2019 to 2022, then had to install dependecies from NuGet Package Manager:

Then I was able to run on any Windows or Linux version.
For reference, to create a Windows Service just need a batch to run as administrator:
Install.cmd
chcp 1252>NUL
SET mypath=%~dp0
sc create "service.name" displayname= "display.name" binpath= %mypath:~0,-1%\app-name.exe start= auto
sc description "service.name" "service description"
NET START service.name
pause
Uninstall.cmd
NET STOP service.name
sc delete "service.name"
pause
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With