ASP.NET Core 3.0: имя типа или пространства имен «CreateDefaultBuilder» не существует в пространстве имен - PullRequest
1 голос
/ 05 октября 2019

Что я использую:

  • .NET Core SDK 3.0.100
  • Visual Studio Community 2019 Версия 16.3.2

Я создалновый проект ASP.NET Core Web API, нацеленный на netcoreapp3.0, и я получаю следующую ошибку:

The type or namespace name 'CreateDefaultBuilder' does not exist in the namespace 'Template.Host' (are you missing an assembly reference?)

enter image description here

Ответы [ 2 ]

3 голосов
/ 05 октября 2019

Посмотрите еще раз на сообщение об ошибке:

Тип или имя пространства имен 'CreateDefaultBuilder' не существует в пространстве имен 'Template.Host' ...

Если у вас есть Host.CreateDefaultBuilder в пространстве имен Template.Host, компилятор предполагает, что вы имеете в виду Template.Host.CreateDefaultBuilder. Есть по крайней мере следующие подходы для исправления:

  1. Вложите оператор using в ваше пространство имен:

    namespace Template.Host
    {
        using Microsoft.Extensions.Hosting;
    
        // ...
    }
    
  2. Псевдонимтип Microsoft.Extensions.Hosting.Host внутри вашего пространства имен:

    namespace Template.Host
    {
        using Host = Microsoft.Extensions.Hosting.Host;
    
        // ...
    }
    
  3. Используйте полное имя типа Host:

    Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args)
    

Host представляет Generic Host и предпочтительнее, чем WebHost в ASP.NET Core 3.0 +.

1 голос
/ 05 октября 2019

ОБНОВЛЕНИЕ: У меня такой низкий статус, что я не могу комментировать пост Кирка. Я не знал о том, что Host является предпочтительным в 3.0. В любом случае, ответ Кирка должен быть правильным

Вы должны использовать WebHost (не Host) следующим образом:

public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }

...