J'ai une méthode qui lit les paramètres de mon fichier de configuration comme ceci:
var value = ConfigurationManager.AppSettings[key];
Il compile bien lorsque vous ciblez .NET Standard 2.0 uniquement.
Maintenant que j'ai besoin de plusieurs cibles, j'ai mis à jour mon fichier de projet avec:
<TargetFrameworks>netcoreapp2.0;net461;netstandard2.0</TargetFrameworks>
Mais maintenant, la compilation échoue pour netcoreapp2.0
avec le message d'erreur suivant:
Error CS0103 The name 'ConfigurationManager' does not exist in the current context (netcoreapp2.0)
Séparément, j'ai créé une nouvelle application console .NET Core 2.0 (ciblant uniquement .NET Core 2.0 cette fois), mais il semble également qu'il n'y ait pas de ConfigurationManager
sous l'espace de nom System.Configuration
.
Je suis assez confus, car il est disponible sous .NET Standard 2.0. Je m'attendrais donc à ce qu'il soit disponible dans .NET Core 2.0, car .NET Core 2.0 est compatible avec .NET Standard 2.0.
Qu'est-ce que je rate?
Oui, ConfigurationManager.AppSettings
est disponible dans .NET Core 2.0 après avoir référencé le package NuGet System.Configuration.ConfigurationManager
.
Les crédits vont à @JeroenMostert pour me donner la solution.
J'ai installé System.Configuration.ConfigurationManager
de Nuget dans mon application .net Core 2.2.
Je fais ensuite référence à using System.Configuration;
Ensuite, j'ai changé
WebConfigurationManager.AppSettings
to ..
ConfigurationManager.AppSettings
Jusqu'à présent, je pense que c'est correct. 4.5.0 is typical with .net core 2.2
Une fois que vous avez configuré les packages, vous devez créer un fichier app.config ou web.config et ajouter un élément semblable à celui-ci:
<configuration>
<appSettings>
<add key="key" value="value"/>
</appSettings>
</configuration>
Les dernières directives sont les suivantes: (de https://docs.Microsoft.com/en-us/Azure/azure-functions/functions-dotnet-class-library#environment-variables )
Utilisation:
System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
De la docs:
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);
}
}
Les paramètres d'application peuvent être lus à partir de variables d'environnement lors du développement local et de l'exécution dans Azure. Lors du développement local, les paramètres d'application proviennent de la collection
Values
du fichier local.settings.json . Dans les deux environnements, local et Azure,GetEnvironmentVariable("<app setting name>")
récupère la valeur du paramètre de l'application nommée. Par exemple, lorsque vous exécutez localement, "Mon site" sera retourné si votre fichier local.settings.json contient{ "Values": { "WEBSITE_SITE_NAME": "My Site Name" } }
.La propriété System.Configuration.ConfigurationManager.AppSettings est une API alternative permettant d'obtenir les valeurs des paramètres d'application, mais nous vous recommandons d'utiliser
GetEnvironmentVariable
comme indiqué ici.