94 votes

Utilisation de app.config dans .Net Core

J'ai un problème. J'ai besoin d'écrire un programme en .Net Core (C #) qui utilise app.config comme ceci:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="custom" type="ConfigurationSample.CustomConfigurationSection, ConfigurationSample"/>
  </configSections>
  <connectionStrings>
    <add name="sampleDatabase" connectionString="Data Source=localhost\SQLExpress;Initial Catalog=SampleDatabase;Integrated Security=True"/>
  </connectionStrings>
  <appSettings>
    <add key="sampleApplication" value="Configuration Sample"/>
  </appSettings>
  <custom>
    <customConfigurations>
      <add key="customSample" name="Mickey Mouse" age="83"/>
    </customConfigurations>
  </custom>
</configuration>
 

et j'écris:

 string connectionString = ConfigurationManager.ConnectionStrings["sampleDatabase"].ConnectionString;
Console.WriteLine(connectionString);

// read appSettings configuration
string appSettingValue = ConfigurationManager.AppSettings["sampleApplication"];
Console.WriteLine(appSettingValue);
 

et c’est un exemple tiré d’internet, donc je pensais que cela fonctionnerait, mais j’obtiens des exceptions:

 System.Configuration.ConfigurationErrorsException: 'Error Initializing the configuration system.'
Inner Exception
TypeLoadException: Could not load type 'System.Configuration.InternalConfigurationHost' from assembly 'CoreCompat.System.Configuration, Version=4.2.3.0, Culture=neutral, PublicKeyToken=null' because the method 'get_bundled_machine_config' has no implementation (no RVA).
 

J'ai téléchargé via NuGet - Install-Package CoreCompat.System.Configuration -Version 4.2.3-r4 -Pre et ne fonctionne toujours pas. Peut-être quelqu'un peut me aider?

95voto

DeepSpace101 Points 1973

Il est possible d'utiliser votre habituelle System.Configuration même dans .NET Core 2.0 sur Linux. Essayez ce test exemple:

  1. Créé un .NET Standard 2.0 de la Bibliothèque (disons MyLib.dll)
  2. Ajouté le package NuGet System.Configuration.ConfigurationManager v4.4.0. Cela est nécessaire, car ce paquet n'est pas couvert par le meta-paquet NetStandard.Library v2.0.0 (j'espère que les changements)
  3. Toutes vos C# de classes dérivées ConfigurationSection ou ConfigurationElement aller en MyLib.dll. Par exemple MyClass.cs provient ConfigurationSection et MyAccount.cs provient ConfigurationElement. Les détails d'implémentation sont hors de portée ici, mais Google est votre ami
  4. Créer un .NET Core 2.0 de l'application (par exemple, une application console, MyApp.dll). .NET applications de Base à la fin avec .dll plutôt que d' .exe dans Cadre.
  5. Créer un app.config en MyApp avec votre configuration personnalisée sections. Cela doit évidemment correspondre à vos conceptions de classe en 3 ci-dessus. Par exemple:

   <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="myCustomConfig" type="MyNamespace.MyClass, MyLib" />
      </configSections>
      <myCustomConfig>
        <myAccount id="007" />
      </myCustomConfig>
    </configuration>

C'est cela, vous trouverez que de l'application.la config est analysée correctement dans MyApp et votre code existant au sein d' MyLib fonctionne très bien. N'oubliez pas d'exécuter dotnet restore si vous passez des plates-formes de Windows (dev) pour Linux (test).

49voto

Set Points 21500
  1. Vous pouvez utiliser l' API de Configuration avec tout .NET de Base d'application, non seulement avec ASP.NET de Base de l'app. Regardez dans l'exemple fourni dans le lien, qui montre comment lire des configs dans l'application console.

  2. Dans la plupart des cas, le JSON source (lire en tant que .json le fichier) est le plus approprié à la config de la source.

    Remarque: ne pas confondre quand quelqu'un dit que le fichier de configuration devrait être appsettings.json. Vous pouvez utiliser n'importe quel nom de fichier, qui est approprié pour vous et l'emplacement du fichier peut être différent - il n'y a pas de règles spécifiques.

    Mais, comme le monde réel est compliqué, il y a beaucoup de différents fournisseurs de configuration:

    • Les formats de fichier (INI, JSON, XML)
    • Arguments de ligne de commande
    • Les variables d'environnement

    et ainsi de suite. Vous pourriez utiliser/écriture d'un fournisseur personnalisé.

  3. En fait, app.config le fichier de configuration est un fichier XML. Ainsi, vous pouvez lire les paramètres de l'aide de XML de configuration du fournisseur dela source sur github, nuget lien). Mais gardez à l'esprit, il sera utilisé uniquement comme une source de configuration - toute logique comment votre application se comporte devraient être mises en œuvre par vous. Fournisseur de Configuration ne changera pas "réglages" et définir des stratégies pour vos applications, mais uniquement lire les données à partir du fichier.

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