我编写了一个小型Windows服务,该服务使用.NET通用主机托管许多基于IHostedService的类。我想添加通过REST API与服务进行通信的功能,并认为.NET通用主机设置应该可以让我轻松地做到这一点:只需添加Microsoft.AspNetCore,Microsoft.AspNetCore.Hosting并从添加一个.ConfigureWebHost到IHostBuilder。但是,似乎.NET Framework和.NET通用主机的结合禁止了它的工作。...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应用程序开始-因此项目文件看起来像:
<?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')" />
...
但也尝试过使用.NET Framework从ASP.NET Core Web应用程序模板构建的项目。 (.NET Framework是使用服务所需的特定程序集的要求。)如下所示:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
</PropertyGroup>
...
似乎这应该可以以某种方式起作用,但是我找不到正确的组合...。
内部看来,.NET通用主机已被带到.NET Framework中,但是其中包含Web主机的部分在AspNetCore中,特别是在版本3中,并且尚未得到支持。 NET框架。因此,尽管这会很好,但是直到.NET 5才有可能。