新しい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パッケージはありますか?
HostingEnvironment
をWebHostEnvironment
に置き換えてください。
ドキュメントが言うように:
IHostingEnvironmentをIWebHostEnvironmentに置き換え、Microsoft.Extensions.Hosting名前空間のusingステートメントを追加します。
同様の問題がありました。私の場合(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番目のプロジェクトで私の問題は解決しました。