Ответ 1
Да, ConfigurationManager.AppSettings
доступен в .NET Core 2.0 после ссылки на пакет NuGet System.Configuration.ConfigurationManager
.
Кредиты отправляются на @JeroenMostert для предоставления мне решения.
У меня есть метод, который читает настройки из моего конфигурационного файла следующим образом:
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.
Что мне не хватает?
Да, ConfigurationManager.AppSettings
доступен в .NET Core 2.0 после ссылки на пакет NuGet System.Configuration.ConfigurationManager
.
Кредиты отправляются на @JeroenMostert для предоставления мне решения.
После того, как вы настроите пакеты, вам нужно будет создать app.config или web.config и добавить что-то вроде следующего:
<configuration>
<appSettings>
<add key="key" value="value"/>
</appSettings>
</configuration>
Я установил 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
Последний набор рекомендаций выглядит следующим образом: (из 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
как показано здесь.
Если вы хотите получить доступ к конфигурации в ядре .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"];
}
Вы можете использовать конфигурацию для решения этой проблемы.
Пример (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);
...
}