c# - 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 包?
解决方案
对于该netstandard2.0
项目,我只能HostingEnvironment
在HostBuilderContext
(from 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
from (来自 IWebHostBuilder.ConfigureAppConfiguration)在由项目WebHostBuilderContext
执行时仍会引发异常。netcoreapp3.0
这适用于以前的版本。
有些东西似乎有点不对劲,但至少现在可以了。
更新
经过更多挖掘后,我发现了引用的区别:
-- netcoreapp3.0
通过共享框架 Microsoft.AspNetCore.Hosting.Abstractions, Version=3.0.0.0
--netstandard2.0
通过 NuGetMicrosoft.AspNetCore.Hosting.Abstractions, Version=2.2.0.0
v2.2 暴露在 v3.0Microsoft.AspNetCore.Hosting.IHostingEnvironment
中已弃用
截至 2019 年 10 月 1 日,v3.0 在 NuGet 上不可用。
推荐阅读
- r - R - 预测 - 根据上一年预测每月值
- python - 有没有办法阻止 python turicreate 使用子目录作为训练数据?
- javascript - 使用 javascript 设置活动类的简单方法
- java - 使用 AES 256 和 SHA-2 加密
- devexpress - 命名空间“DevExpress.Utils.About”中不存在类型或命名空间名称“frmAbout”
- php - 警告:mysqli::query(): 无法获取 mysqli - PHP7.1 & MySQL5.7
- matlab - MATLAB 在 t = 0、0.001、0.01、1 和 10 处绘制一个图
- signals - 检测元音和辅音?
- java - Java Apache POI - 编辑和保存后需要修复工作簿
- vb.net - 如何在没有 Select Case 的情况下选择要实例化的对象?