web-dev-qa-db-fra.com

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?

38
Nju
  1. Vous pouvez utiliser API de configuration avec toute application .NET Core, pas seulement avec l'application ASP.NET Core. Regardez dans l'exemple fourni dans le lien, qui montre comment lire les configurations dans l'application de la console.

  2. Dans la plupart des cas, la source JSON (lue sous forme de fichier .json]) est la source de configuration la mieux adaptée.

    Remarque: ne soyez pas dérouté quand quelqu'un dit que le fichier de configuration doit être appsettings.json. Vous pouvez utiliser n'importe quel nom de fichier, qui vous convient 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 existe de nombreux fournisseurs de configuration:

    • Formats de fichier (INI, JSON et XML)
    • Arguments de ligne de commande
    • Variables d'environnement

    etc. Vous pouvez même utiliser/écrire un fournisseur personnalisé.

  3. En fait, le fichier de configuration app.config était un fichier XML. Vous pouvez donc en lire les paramètres à l’aide du fournisseur de configuration XML ( source sur github , lien nuget ). Mais gardez à l'esprit, il ne sera utilisé que comme source de configuration - toute logique selon laquelle votre application se comporte devrait être implémentée par vous. Le fournisseur de configuration ne modifiera pas les "paramètres" ni les stratégies de vos applications, mais lira uniquement les données du fichier.

22
Set

Il est possible d'utiliser votre System.Configuration habituel même dans .NET Core 2.0 sous Linux. Essayez cet exemple de test:

  1. Création d'une bibliothèque .NET Standard 2.0 (par exemple, MyLib.dll)
  2. Ajout du paquet NuGet System.Configuration.ConfigurationManager v4.4.0. Cela est nécessaire car ce paquet n'est pas couvert par le méta-paquet NetStandard.Library v2.0.0 (j'espère que cela changera)
  3. Toutes vos classes C # dérivées de ConfigurationSection ou ConfigurationElement vont dans MyLib.dll. Par exemple, MyClass.cs est dérivé de ConfigurationSection et MyAccount.cs est dérivé de ConfigurationElement. Les détails de la mise en œuvre sont hors de portée ici, mais Google est votre ami
  4. Créez une application .NET Core 2.0 (une application de console, par exemple, MyApp.dll). Les applications .NET Core se terminent par .dll plutôt que .exe dans Framework.
  5. Créez un app.config dans MyApp avec vos sections de configuration personnalisées. Cela devrait évidemment correspondre à vos conceptions de classe dans # 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 ça - vous constaterez que app.config est correctement analysé dans MyApp et que votre code existant dans MyLib fonctionne parfaitement. N'oubliez pas de lancer dotnet restore si vous passez de Windows (dev) à Linux (test).

32
DeepSpace101