Как добавить REST API в консольное приложение, написанное на. NET Framework 4.8, используя. NET generi c host? - PullRequest
1 голос
/ 26 мая 2020

Я написал небольшую службу 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>
  ...

Похоже, это должно как-то работать, но я не могу найти правильная комбинация ....

1 Ответ

1 голос
/ 29 мая 2020

Под капотом это выглядит так, как будто хост. NET Generi c был перенесен в. NET Framework, но та его часть, которая содержала веб-хост, была в AspNetCore, особенно в версии 3, и который еще не поддерживается в. NET Framework. Так что, хотя было бы неплохо, если бы это сработало, скорее всего, не будет, пока. NET 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...