Доступен ли ConfigurationManager.AppSettings в .NET Core 2.0?

У меня есть метод, который читает настройки из моего конфигурационного файла следующим образом:

var value = ConfigurationManager.AppSettings[key];

Он компилируется при настройке только для .NET Standard 2.0.

Теперь мне нужно несколько целей, поэтому я обновил файл проекта:

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

Но теперь компиляция не выполняется для netcoreapp2.0 со следующим сообщением об ошибке:

Error   CS0103  The name 'ConfigurationManager' does not exist in the current context   (netcoreapp2.0)

В отдельности я создал новое консольное приложение .NET Core 2.0 (на этот раз только таргетинг на .NET Core 2.0), но похоже, что в пространстве имен System.Configuration нет ConfigurationManager.

Я довольно смущен, потому что он доступен в .NET Standard 2.0, поэтому я ожидаю, что он будет доступен в .NET Core 2.0, так как .NET Core 2.0 совместим с .NET Standard 2.0.

Что мне не хватает?

Ответ 1

Да, ConfigurationManager.AppSettings доступен в .NET Core 2.0 после ссылки на пакет NuGet System.Configuration.ConfigurationManager.

Кредиты отправляются на @JeroenMostert для предоставления мне решения.

Ответ 2

После того, как вы настроите пакеты, вам нужно будет создать app.config или web.config и добавить что-то вроде следующего:

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

Ответ 3

Я установил System.Configuration.ConfigurationManager из Nuget в мое приложение .net core 2.2.

Затем я using System.Configuration;

Далее я поменял

WebConfigurationManager.AppSettings

to ..

ConfigurationManager.AppSettings

Пока я считаю, что это правильно. 4.5.0 is typical with.net core 2.2

Ответ 4

Последний набор рекомендаций выглядит следующим образом: (из https://docs.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. При локальной разработке параметры приложения берутся из коллекции Values в файле local.settings.json. В обеих средах, локальной и Azure, GetEnvironmentVariable("<app setting name>") извлекает значение параметра именованного приложения. Например, когда вы работаете локально, "Имя моего сайта" будет возвращено, если ваш файл local.settings.json содержит { "Values": { "WEBSITE_SITE_NAME": "My Site Name" } }.

Свойство System.Configuration.ConfigurationManager.AppSettings является альтернативным API для получения значений параметров приложения, но мы рекомендуем использовать GetEnvironmentVariable как показано здесь.

Ответ 5

Если вы хотите получить доступ к конфигурации в ядре .NET, обязательно добавьте IConfiguration в конструктор вашего класса, выполнив следующие действия...

1.) Импортируйте пакет Nuget Microsoft.Extensions.Configuration и убедитесь, что он доступен для проекта, из которого вы хотите получить доступ к конфигурации.

2.) В вашем appSettings.json добавьте раздел конфигурации, т.е.

    "MyConfigSection": {
        "MySetting": "This is the value for MySetting" 
    },

3.) Вставьте IConfiguration в ваш конструктор

using IConfiguration = Microsoft.Extensions.Configuration.IConfiguration; 
IConfiguration _configuration;
string _myConfigSetting;

public MyClass(IConfiguration configuration)
{
  _configuration = configuration;
  _myConfigSetting = _configuration["MyConfigSection:MySetting"];
}

Ответ 6

Вы можете использовать конфигурацию для решения этой проблемы.

Пример (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);

       ...
    }