Я написал небольшую службу Windows, в которой размещается ряд классов на основе IHostedService, использующих хост. NET generi c. Я хотел бы добавить возможность общаться со службой через REST API, и подумал, что настройка хоста. NET generi c должна позволить мне сделать это довольно легко: просто добавьте Microsoft.AspNetCore, Microsoft.AspNetCore.Hosting и начните с добавления .ConfigureWebHost в IHostBuilder. Но похоже, что комбинация. NET Framework и. NET generi c host запрещает этому работать .... Program.cs выглядит примерно так:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Myservice
{
class Program
{
static async Task Main(string[] args)
{
IHostBuilder builder = Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(...)
.ConfigureAppConfiguration(...)
// ConfigureWebHost can't be found by the compiler
// Neither can .ConfigureWebHostDefaults
.ConfigureWebHost(...)
.ConfigureLogging(...)
.ConfigureServices(...);
if (CommandLine.RunAsService)
{
builder.UseWindowsService();
}
await builder.Build().RunAsync();
}
}
}
Я видел некоторые подсказки, что конкретный тип проекта имеет значение. Я начал со стандартного. NET Framework Console App - поэтому файл проекта выглядит примерно так:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
...
, но я также пробовал с проектом, созданным из ASP. NET Core веб-приложения шаблон с использованием. NET Framework. (. NET Framework - это требование для использования определенных сборок, необходимых службе.) Это выглядело примерно так:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
</PropertyGroup>
...
Похоже, это должно как-то работать, но я не могу найти правильная комбинация ....