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;

    }

它仅在运行时失败,并且仅在访问HostingEnvironment. 当删除/评论var env = context.HostingEnvironment;作业时,我仍然可以在调试中检查和查看它。


知道我在这里缺少什么吗?


白板的微信
浏览 172回答 4
4回答

慕田峪7331174

对于该netstandard2.0项目,我只能在(来自)HostingEnvironment中获取-安装了软件包:HostBuilderContextIHostBuilder.ConfigureAppConfigurationMicrosoft.Extensions.Hosting.Abstractionspublic static IHostBuilder CustomConfigureAppConfiguration(this IHostBuilder hostBuilder){  hostBuilder.ConfigureAppConfiguration((context, config) =>  {    // this works with Microsoft.Extensions.Hosting.Abstractions installed    var env = context.HostingEnvironment;  });  return hostBuilder;}HostingEnvironmentfrom WebHostBuilderContext(from IWebHostBuilder.ConfigureAppConfiguration) 在项目执行时仍然会引发异常netcoreapp3.0。这在以前的版本中工作得很好。另外,当注释掉时,我仍然可以在调试期间检查它:似乎仍然有点不对劲,但至少现在可以了。更新经过更多挖掘后,我发现了引用的差异:- netcoreapp3.0- 通过共享框架 Microsoft.AspNetCore.Hosting.Abstractions, Version=3.0.0.0-netstandard2.0通过 NuGetMicrosoft.AspNetCore.Hosting.Abstractions, Version=2.2.0.0v2.2 公开了v3.0 中Microsoft.AspNetCore.Hosting.IHostingEnvironment已弃用的内容截至 2019 年 10 月 1 日,v3.0 在 NuGet 上不可用。

慕后森

我有类似的问题。就我而言(EF 3.0),我正在使用一个带有Microsoft.Extensions.Hosting (3.0.1).&nbsp;这是使用来自不同项目的类。这第二个项目包括Microsoft.Azure.WebJobs.Extensions (3.0.5)。该包有Microsoft.Azure.WebJobs (3.0.14)一个依赖项。这包括Microsoft.Extensions.Hosting (2.1.0)与 EF 3.0 不兼容的 。包括&nbsp;&nbsp;&nbsp;&nbsp;<PackageReference&nbsp;Include="Microsoft.Extensions.Hosting"&nbsp;Version="3.0.1"&nbsp;/>在第二个项目中解决了我的问题。

千巷猫影

请将您的替换HostingEnvironment为WebHostEnvironment.正如文件所说:将 IHostingEnvironment 替换为 IWebHostEnvironment 并为 Microsoft.Extensions.Hosting 命名空间添加 using 语句。

噜噜哒

我遇到了这个问题,我的无服务器 API 有另一个项目作为参考。在该引用的项目中,我使用了以下 PackageReference:Microsoft.Extensions.Configuration.AbstractionsMicrosoft.Extensions.Logging.Abstractions我只有在将版本更改为 2.1.0 后才能使其工作,我使用的是 v3+ 版本
打开App,查看更多内容
随时随地看视频慕课网APP