web-dev-qa-db-fra.com

ConfigurationManager.AppSettings est-il disponible dans .NET Core 2.0?

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?

91
Alex Sanséau

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.

189
Alex Sanséau

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

8
Tom Stickel

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>
7
Sharpiro

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.

4
Nate Radebaugh