2017-07-11 4 views
7

Ich habe ein Problem. Ich brauche ein Programm in .NET Core (C#), die wie folgt verwenden, schreiben app.config:Verwenden von app.config in .Net Core

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

und ich schreibe:

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

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

und es ist beispielsweise aus dem Internet, so dachte, ich würde Arbeit, aber ich bin Ausnahmen bekommen:

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

ich über NuGet heruntergeladen - Install-Package CoreCompat.System.Configuration -Version 4.2.3-r4 -Pre und funktioniert immer noch nicht. Vielleicht kann mir jemand helfen?

+1

Ich denke für .net-Core werden Sie JSON-Dateien für die Konfiguration verwenden. Schau darauf. – Phiter

+0

In .NET Core verwenden Sie appsettings.json, nicht app.config. –

+0

aber ich sagte über .Net Core und nicht ASP.Net Kern – Nju

Antwort

3
  1. Sie können Configuration API mit jeden .NET Core-app, nicht nur mit ASP.NET Core-App verwenden. Sehen Sie sich das Beispiel an, das in dem Link bereitgestellt wird, der zeigt, wie Sie in der Konsolen-App Konfigurationen lesen können.

  2. In den meisten Fällen ist die JSON-Quelle (gelesen als .json) die am besten geeignete Konfigurationsquelle.

    Hinweis: Seien Sie nicht verwirrt, wenn jemand sagt, dass die Konfigurationsdatei appsettings.json sein sollte. Sie können einen beliebigen Dateinamen verwenden, der für Sie geeignet ist, und der Speicherort der Datei kann unterschiedlich sein - es gibt keine spezifischen Regeln.

    Aber, wie die wirkliche Welt ist kompliziert, es gibt viele verschiedene Konfigurationsanbieter:

    • Dateiformate (INI, JSON und XML)
    • Befehlszeilenargumente
    • Umgebungsvariablen

    und so weiter. Sie können sogar einen benutzerdefinierten Anbieter verwenden/schreiben.

  3. Eigentlich app.config Konfigurationsdatei war eine XML-Datei. So können Sie Einstellungen davon mit dem XML-Konfigurationsanbieter (source on github, nuget link) lesen. Aber denken Sie daran, es wird nur als Konfigurationsquelle verwendet - jede Logik, wie sich Ihre App verhält, sollte von Ihnen implementiert werden. Der Konfigurationsprovider ändert nicht die Einstellungen und Richtlinien für Ihre Apps, sondern liest nur Daten aus der Datei.

+0

"Quelle auf GitHub" Link ist gebrochen – dimaaan

+0

@dimaaan nicht mehr. –

5

Es ist möglich, Ihre üblichen System.Configuration sogar in .NET Core 2.0 unter Linux zu verwenden. Versuchen Sie, dieses Testbeispiel:

  1. Erstellt ein .NET-Standard 2.0-Bibliothek (zB MyLib.dll)
  2. Added der NuGet Paket System.Configuration.ConfigurationManager v4.4.0. Das ist erforderlich, da dieses Paket durch das Meta-Paket NetStandard.Library v2.0.0 nicht abgedeckt ist (ich hoffe, dass Änderungen)
  3. Alle Ihre C# Klassen abgeleitet von ConfigurationSection oder ConfigurationElement gehen in MyLib.dll. Zum Beispiel leitet sich MyClass.cs von ConfigurationSection ab und MyAccount.cs leitet sich von ConfigurationElement ab.Die Implementierungsdetails sind hier nicht aufgeführt, aber Google is your friend
  4. Erstellen Sie eine .NET Core 2.0-Anwendung (z. B. eine Konsolenanwendung, MyApp.dll). .NET Core-Anwendungen enden mit .dll anstelle von .exe in Framework.
  5. Erstellen Sie eine app.config in MyApp mit Ihren benutzerdefinierten Konfigurationsabschnitten. Dies sollte offensichtlich Ihre Klassen-Designs in # 3 oben entsprechen. Zum Beispiel:
 
    <?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
     <configSections> 
     <section name="myCustomConfig" type="MyNamespace.MyClass, MyLib" /> 
     </configSections> 
     <myCustomConfig> 
     <myAccount id="007" /> 
     </myCustomConfig> 
    </configuration> 

, dass es - Sie werden feststellen, dass die app.config innerhalb MyApp und Ihre vorhandenen Code innerhalb MyLib funktioniert gut ordnungsgemäß analysiert wird. Vergessen Sie nicht, dotnet restore auszuführen, wenn Sie die Plattformen von Windows (dev) zu Linux (test) wechseln.

Verwandte Themen