176 votes

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

J'ai une méthode qui lit les paramètres de mon fichier de config comme ceci:

var value = ConfigurationManager.AppSettings[key];

Il compile très bien lors de ciblage .NET Standard 2.0 uniquement.

Maintenant j'ai besoin de plusieurs cibles, donc 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éé un nouveau .NET Core 2.0 application console (uniquement le ciblage .NET Core 2.0 cette fois), mais, de même il ne semble pas exister ConfigurationManager sous l'espace de noms System.Configuration.

Je suis assez confus, car il est disponible sous .NET Standard 2.0, donc je m'attends à ce qu'elle soit disponible dans .NET Core 2.0 .NET Core 2.0 est .NET Standard 2.0.

Ce qui me manque?

311voto

Alex Sanséau Points 3348

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.

24voto

Tom Stickel Points 4201

J'ai installé System.Configuration.ConfigurationManager de Nuget dans mon application .net core 2.2.

Je fais alors 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

13voto

Sharpiro Points 850

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>
 

10voto

nate.radebaugh Points 121

La dernière série de conseils est comme suit: (à partir de https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#environment-variables)

Utilisation:

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

À partir de la documentation:

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 de l'application peut être lu à partir des variables d'environnement lors de l'élaboration localement et lors de l'exécution dans Azure. Lorsque le développement local, les paramètres de l'application viennent de l' Values de la collecte dans le local.les paramètres.json fichier. Dans les deux environnements, locale et d'Azur, GetEnvironmentVariable("<app setting name>") récupère la valeur de la nommée app réglage. Par exemple, lorsque vous êtes en cours d'exécution à l'échelle locale "le Nom de Mon Site" serait remboursée si votre local.les paramètres.fichier json contient { "Values": { "WEBSITE_SITE_NAME": "My Site Name" } }.

Le Système De.La Configuration.ConfigurationManager.AppSettings propriété est une alternative API pour la prise en application les valeurs de réglage, mais nous vous recommandons d'utiliser GetEnvironmentVariable comme indiqué ici.

0voto

Vous pouvez utiliser Configuration pour résoudre ce problème.

Ex (Startup.cs):

Vous pouvez passer par DI aux contrôleurs après cette implémentation.

 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);

       ...
    }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X