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?
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.
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:
etc. Vous pouvez même utiliser/écrire un fournisseur personnalisé.
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.
Il est possible d'utiliser votre System.Configuration
habituel même dans .NET Core 2.0 sous Linux. Essayez cet exemple de test:
MyLib.dll
)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)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 amiMyApp.dll
). Les applications .NET Core se terminent par .dll
plutôt que .exe
dans Framework.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).