ConfigurationManager。AppSettings在.NET Core 2.0中可用?

我有一个方法,读取设置从我的配置文件像这样:

var value = ConfigurationManager.AppSettings[key];

它在仅针对. net标准2.0时编译良好。

现在我需要多个目标,所以我更新了我的项目文件:

<TargetFrameworks>netcoreapp2.0;net461;netstandard2.0</TargetFrameworks>

但是现在,netcoreapp2.0的编译失败,并出现以下错误消息:

名称“ConfigurationManager”在当前上下文中不存在(netcoreapp2.0)

另外,我创建了一个新的。net Core 2.0控制台应用程序(这次只针对。net Core 2.0),但同样地,System.Configuration命名空间下似乎没有ConfigurationManager

我很困惑,因为它在。net标准2.0下可用,所以我希望它在。net核心2.0中可用,因为。net核心2.0是。net标准2.0兼容的。

我错过了什么?

157066 次浏览

是的,在引用NuGet包System.Configuration.ConfigurationManager后,ConfigurationManager.AppSettings在. net Core 2.0中可用。

感谢@JeroenMostert给我的解决方案。

一旦你有包设置,你需要创建一个app.config或web。配置并添加如下内容:

<configuration>
<appSettings>
<add key="key" value="value"/>
</appSettings>
</configuration>

我从Nuget安装System.Configuration.ConfigurationManager到我的。net core 2.2应用程序。

然后引用using System.Configuration;

接下来,我改变了

WebConfigurationManager.AppSettings


to ..


ConfigurationManager.AppSettings

到目前为止,我认为这是正确的。4.5.0 is typical with .net core 2.2

我在这方面没有任何问题。

最新的指导如下:(来自https://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#environment-variables)

使用:

System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);

从文档中可以看出:

public static class EnvironmentVariablesExample
{
[FunctionName("GetEnvironmentVariables")]
public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
log.LogInformation(GetEnvironmentVariable("AzureWebJobsStorage"));
log.LogInformation(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
}


public static string GetEnvironmentVariable(string name)
{
return name + ": " +
System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}
}

在本地开发和在Azure中运行时,应用程序设置都可以从环境变量中读取。在本地开发时,应用程序设置来自local.settings.json文件中的Values集合。在本地和Azure这两个环境中,GetEnvironmentVariable("<app setting name>")检索命名应用程序设置的值。例如,当您在本地运行时,如果您的local.settings.json文件包含{ "Values": { "WEBSITE_SITE_NAME": "My Site Name" } },则会返回“My Site Name”。

System.Configuration.ConfigurationManager.AppSettings属性是获取应用设置值的另一种API,但我们建议您使用如下所示的GetEnvironmentVariable

您可以使用配置来解决这个问题。

例(Startup.cs):

在这个实现之后,您可以通过DI传递给控制器。

public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);


Configuration = builder.Build();


}


public IConfiguration Configuration { get; }


// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{


var microserviceName = Configuration["microserviceName"];


services.AddSingleton(Configuration);


...
}
我知道有点晚了,但也许有人正在寻找一种简单的方法来访问。net core app中的appsettings。 在API构造函数中添加以下内容:

public class TargetClassController : ControllerBase
{
private readonly IConfiguration _config;


public TargetClassController(IConfiguration config)
{
_config = config;
}


[HttpGet("{id:int}")]
public async Task<ActionResult<DTOResponse>> Get(int id)
{
var config = _config["YourKeySection:key"];
}
}

我使用下面的代码示例。而且这是非常方便的方式。

using Microsoft.Extensions.Configuration;
using System.IO;


namespace DemoWeppApp
{
public static class StaticConfigurationManager
{
public static IConfiguration AppSetting { get; }
static StaticConfigurationManager()
{
AppSetting = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
}
}
}

我可以在任何静态类中使用

StaticConfigurationManager.AppSetting["conf_name"];