2017-07-11 42 views
7

Mam problem. Muszę napisać program w .NET rdzenia (C#), które wykorzystują app.config tak:Używanie app.config w .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> 

i piszę:

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

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

i to jest przykład z internetu więc pomyślałem, praca, ale jestem coraz wyjątki:

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

Pobrałem poprzez Nuget - Install-Package CoreCompat.System.Configuration -version 4.2.3-r4 -Pre i nadal nie działa. Może ktoś może mi pomóc?

+1

Myślę, że do rdzenia .net będziesz używał plików json do konfiguracji. Spójrz na to. – Phiter

+0

W .NET Core używasz appsettings.json, a nie app.config. –

+0

ale mówiłem o .Net Core, a nie rdzeniu ASP.Net – Nju

Odpowiedz

3
  1. Można użyć Configuration API z żadnego aplikację .NET Core nie tylko z aplikacji ASP.NET podstawowej. Sprawdź przykład podany w łączu, który pokazuje, jak odczytać konfiguracje w aplikacji konsoli.

  2. W większości przypadków źródłem JSON (odczytanym jako plik .json) jest najbardziej odpowiednie źródło konfiguracji.

    Uwaga: nie należy mylić, gdy ktoś mówi, że plik konfiguracyjny powinien być appsettings.json. Możesz użyć dowolnej nazwy pliku, która jest dla Ciebie odpowiednia, a lokalizacja pliku może być inna - nie ma żadnych konkretnych reguł.

    Ale, jak prawdziwy świat jest skomplikowany, istnieje wiele różnych dostawców konfiguracyjnych:

    • formatów (INI, JSON i XML)
    • argumenty wiersza polecenia
    • Zmienne środowiskowe

    i tak dalej. Możesz nawet użyć/napisać niestandardowego dostawcę.

  3. W rzeczywistości, plik konfiguracyjny app.config był plikiem XML. Dzięki temu można odczytać ustawienia za pomocą dostawcy konfiguracji XML (source on github, nuget link). Pamiętaj jednak, że będzie on używany tylko jako źródło konfiguracji - każda logika zachowywania się aplikacji powinna być przez ciebie zaimplementowana. Dostawca konfiguracji nie zmieni "ustawień" i nie skonfiguruje zasad dla aplikacji, a jedynie odczyta dane z pliku.

+0

"Źródło na github" link jest zepsuty – dimaaan

+0

@dimaaan Już nie. –

5

Możliwe jest użycie zwykłego System.Configuration nawet w .NET Core 2.0 na Linux. Spróbuj tego przykładu testowego:

  1. Utworzony .NET 2.0 Standardowa biblioteka (słownie MyLib.dll)
  2. Dodano Nuget pakiet System.Configuration.ConfigurationManager v4.4.0. Jest to konieczne, ponieważ ten pakiet nie jest objęte meta-pakietu NetStandard.Library v2.0.0 (mam nadzieję, że zmiany)
  3. Wszystkie twoje # Klasy C pochodzi od ConfigurationSection lub ConfigurationElement wchodzić MyLib.dll. Na przykład MyClass.cs pochodzi od ConfigurationSection, a MyAccount.cs pochodzi od ConfigurationElement.Szczegóły dotyczące implementacji znajdują się tutaj poza zakresem, ale Google is your friend
  4. Utwórz aplikację .NET Core 2.0 (np. Aplikację konsolową, MyApp.dll). Aplikacje .NET Core kończą się na .dll zamiast na .exe w programie Framework.
  5. Utwórz app.config w MyApp za pomocą niestandardowych sekcji konfiguracji. Powinno to oczywiście pasować do twoich projektów klasowych w punkcie 3 powyżej. Na przykład:
 
    <?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
     <configSections> 
     <section name="myCustomConfig" type="MyNamespace.MyClass, MyLib" /> 
     </configSections> 
     <myCustomConfig> 
     <myAccount id="007" /> 
     </myCustomConfig> 
    </configuration> 

To wszystko - przekonasz się, że app.config jest analizowany poprawnie ciągu MyApp i istniejący kod wewnątrz MyLib działa dobrze. Nie zapomnij uruchomić dotnet restore, jeśli zmienisz platformy z Windows (dev) na Linux (test).