ASP.NET Core 3.0 get_HostingEnvironment () Метод не найден в расширении - PullRequest
1 голос
/ 30 сентября 2019

Ниже код для репликации ошибки для некоторых расширений, которые я пытаюсь создать в новом проекте API ASP.NET Core 3.0.

using ClassLibrary1;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
              webBuilder.UseStartup<Startup>();

              webBuilder.ConfigureAppConfiguration((context, config) =>
              {
                // this works fine
                var env = context.HostingEnvironment;
              });

              webBuilder.CustomConfigureAppConfiguration();
            })
            .ConfigureAppConfiguration((context, config) =>
            {
              // this works fine
              var env = context.HostingEnvironment;
            })
            .CustomConfigureAppConfiguration();
  }
}

Этот класс Extensions должен находиться в другом проекте. Кажется, работает нормально, когда в том же основном проекте.

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

// This project can be either netstandard2.0 or netcoreapp3.0
namespace ClassLibrary1
{
  public static class Extensions
  {
    public static IWebHostBuilder CustomConfigureAppConfiguration(this IWebHostBuilder hostBuilder)
    {
      hostBuilder.ConfigureAppConfiguration((context, config) =>
      {
        // this fails with System.MissingMethodException: 'Method not found: 'Microsoft.AspNetCore.Hosting.IHostingEnvironment Microsoft.AspNetCore.Hosting.WebHostBuilderContext.get_HostingEnvironment()'.'
        var env = context.HostingEnvironment;
      });

      return hostBuilder;
    }

    public static IHostBuilder CustomConfigureAppConfiguration(this IHostBuilder hostBuilder)
    {
      hostBuilder.ConfigureAppConfiguration((context, config) =>
      {
        // this fails with System.MissingMethodException: 'Method not found: 'Microsoft.Extensions.Hosting.IHostingEnvironment Microsoft.Extensions.Hosting.HostBuilderContext.get_HostingEnvironment()'.'
        var env = context.HostingEnvironment;
      });

      return hostBuilder;
    }
  }
}

Это происходит сбой только во время выполнения и только при доступе к HostingEnvironment. При удалении / комментировании назначения var env = context.HostingEnvironment; я все еще могу проверить и просмотреть его в отладке.

Есть идеи, что мне здесь не хватает?

РЕДАКТИРОВАТЬ

Обновление проекта ClassLibrary1 до netcoreapp3.0 и добавление <FrameworkReference Include="Microsoft.AspNetCore.App" />, как показано ниже, работает:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.2.0" />
  </ItemGroup>

</Project>

Я все еще хотел бы сохранить проект как netstandard2.0, если это возможно. Возможно какой-то конкретный пакет NuGet, который мне нужен для этого?

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Для проекта netstandard2.0 я мог получить только HostingEnvironment в HostBuilderContext (из IHostBuilder.ConfigureAppConfiguration) - с установленным пакетом Microsoft.Extensions.Hosting.Abstractions:

public static IHostBuilder CustomConfigureAppConfiguration(this IHostBuilder hostBuilder)
{
  hostBuilder.ConfigureAppConfiguration((context, config) =>
  {
    // this works with Microsoft.Extensions.Hosting.Abstractions installed
    var env = context.HostingEnvironment;
  });

  return hostBuilder;
}

HostingEnvironmentиз WebHostBuilderContext (из IWebHostBuilder.ConfigureAppConfiguration) по-прежнему выдает исключение при выполнении проектом netcoreapp3.0. Это работало нормально с предыдущими версиями.

Также я все еще могу проверить это во время отладки, когда закомментировано: enter image description here

Что-то все еще кажется немного не в порядке, но по крайней меретеперь это работает.

ОБНОВЛЕНИЕ

После дополнительного поиска я обнаружил разницу в ссылках:
- netcoreapp3.0 - через общий каркас Microsoft.AspNetCore.Hosting.Abstractions, Version=3.0.0.0
- netstandard2.0 через NuGet Microsoft.AspNetCore.Hosting.Abstractions, Version=2.2.0.0

v2.2 выставляет Microsoft.AspNetCore.Hosting.IHostingEnvironment, который был устарел в v3.0

По состоянию на2019/10/01 v3.0 недоступен в NuGet.

0 голосов
/ 30 сентября 2019

Пожалуйста, замените HostingEnvironment на WebHostEnvironment.

Как сказано в документе:

https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio#migrate-startupconfigure

Замените IHostingEnvironment на IWebHostEnvironment и добавьтеоператор using для пространства имен Microsoft.Extensions.Hosting.

...