web-dev-qa-db-ja.com

ASP.NET Core 3.0 get_HostingEnvironment()メソッドが拡張で見つかりません

新しいASP.NET Core 3.0 APIプロジェクトで作成しようとしているいくつかの拡張機能のエラーを再現するコードの下。

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パッケージはありますか?

4
JvR

HostingEnvironmentWebHostEnvironmentに置き換えてください。

ドキュメントが言うように:

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

IHostingEnvironmentをIWebHostEnvironmentに置き換え、Microsoft.Extensions.Hosting名前空間のusingステートメントを追加します。

0
Anduin

同様の問題がありました。私の場合(EF 3.0)、Microsoft.Extensions.Hosting (3.0.1)を使用して1つのプロジェクトを使用していました。これは別のプロジェクトのクラスを使用していました。この2番目のプロジェクトにはMicrosoft.Azure.WebJobs.Extensions (3.0.5)が含まれていました。このパッケージには、依存関係としてMicrosoft.Azure.WebJobs (3.0.14)があります。これには、EF 3.0と互換性のないMicrosoft.Extensions.Hosting (2.1.0)が含まれます。含む

    <PackageReference Include="Microsoft.Extensions.Hosting" Version="3.0.1" />

2番目のプロジェクトで私の問題は解決しました。

0
xavier