Najprostszy sposób na posiadanie pliku konfiguracji w aplikacji C # Windows Forms

88

Jestem naprawdę nowy w .NET i nadal nie rozumiem, jak działają pliki konfiguracyjne.

Za każdym razem, gdy wyszukuję w Google na ten temat, otrzymuję wyniki dotyczące web.config, ale piszę aplikację Windows Forms.

Doszedłem do wniosku, że muszę użyć przestrzeni nazw System.Configuration, ale dokumentacja nie pomaga.

Jak zdefiniować, że mój plik konfiguracyjny to XYZ.xml? A może ma „domyślną” nazwę pliku konfiguracyjnego? Nadal tego nie rozumiem.

Jak również zdefiniować nową sekcję? Czy naprawdę muszę tworzyć klasę, która dziedziczy po ConfigurationSection?

Chciałbym mieć tylko plik konfiguracyjny z takimi wartościami:

<MyCustomValue>1</MyCustomValue>
<MyCustomPath>C:\Some\Path\Here</MyCustomPath>

Czy jest na to prosty sposób? Czy możesz w prosty sposób wyjaśnić, jak czytać i zapisywać z / do prostego pliku konfiguracyjnego?

Fabio Gomes
źródło
1
Jaka jest Twoja wersja .NET? W przypadku wersji 2.0 i nowszych istnieje bardzo ładny sposób o nazwie Ustawienia.
Thomas
1
@Seven to była literówka, ale może oznaczać „Wyjaśnij na przykładzie” :)
Fabio Gomes

Odpowiedzi:

121

Chcesz użyć aplikacji App.Config.

Kiedy dodajesz nowy element do projektu, pojawia się coś, co nazywa się plikiem konfiguracji aplikacji. Dodaj to.

Następnie dodajesz klucze w sekcji configuration / appsettings

Lubić:

<configuration>
 <appSettings>
  <add key="MyKey" value="false"/>

Uzyskaj dostęp do członków, wykonując

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

Działa to w .NET 2 i nowszych.

qui
źródło
2
Właściwie to działa we wszystkich wersjach .NET, począwszy od wersji 1.0. Nowa klasa w .NET 2.0 to ConfigurationManager.
Mike Dimmick,
4
Osobiście używam zakładki „Ustawienia” w „Właściwościach aplikacji” (tylko Framework 2.0 i nowszych), ponieważ Visual Studio użyje silnie typizowanych właściwości code-gen dla twoich ustawień. Mogą również zawierać ustawienia „użytkownika”, które są odczytywane / zapisywane w czasie wykonywania.
Adrian Clark
@Mike yeah, miałem wrażenie, że tak było, ale nie byłem zbyt pewien. Nie pracowałem zbyt wiele z 1.
qui
26
Zauważ, że ConfigurationSettingsjest przestarzały, użyj System.Configuration.ConfigurationManager.AppSettings["MyKey"];.
JNF,
16
Również uwaga, aby użyć System.Configuration.ConfigurationManagertwojego projektu, potrzebujesz odniesienia doSystem.Configuration.dll
dmeglio
66

Wyjaśnienie poprzednich odpowiedzi ...

  1. Dodaj nowy plik do projektu ( DodajNowy elementPlik konfiguracyjny aplikacji )

  2. Nowy plik konfiguracji pojawi się w Eksploratorze rozwiązań jako App.Config .

  3. Dodaj swoje ustawienia do tego pliku, używając poniższego szablonu jako szablonu

    <configuration>
      <appSettings>
        <add key="setting1" value="key"/>
      </appSettings>
      <connectionStrings>
        <add name="prod" connectionString="YourConnectionString"/>
      </connectionStrings>
    </configuration>
    
  4. Odzyskaj je w ten sposób:

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }
    
  5. Po utworzeniu folder wyjściowy będzie zawierał plik o nazwie <nazwa_zbioru> .exe.config. Będzie to kopia pliku App.Config . Deweloper nie powinien wykonywać żadnych dalszych prac, aby utworzyć ten plik.

ZombieSheep
źródło
1
To było dla mnie przydatne. Dwie inne kwestie: Podczas dodawania nowego pliku do projektu plik konfiguracyjny aplikacji został znaleziony po kliknięciu węzła Ogólne po lewej stronie okna dialogowego. Aby użyć klasy ConfigurationManager w moim kodzie, musiałem dodać bibliotekę DLL System.Configuration do moich odniesień.
John Gilmer,
28

Po szybkim przeczytaniu poprzednich odpowiedzi wyglądają na poprawne, ale nie wygląda na to, aby ktokolwiek wspomniał o nowych funkcjach konfiguracyjnych w Visual Studio 2008. Nadal używa app.config (skopiowanego w czasie kompilacji do YourAppName.exe.config), ale istnieje widżet interfejsu użytkownika do ustawiania właściwości i określania ich typów. Kliknij dwukrotnie Settings.settings w folderze „Properties” projektu.

Najlepsze jest to, że dostęp do tej właściwości z kodu jest bezpieczny dla typów - kompilator wychwyci oczywiste błędy, takie jak błędne wpisanie nazwy właściwości. Na przykład do właściwości o nazwie MyConnectionString w pliku app.config można uzyskać dostęp w następujący sposób:

string s = Properties.Settings.Default.MyConnectionString;
maxfurni
źródło
Było to dostępne w VS2005.
Greg D
5
Fajnie, ale to (Właściwości projektu | Ustawienia) generuje kod, który musi zostać skompilowany. Jeśli chcesz zmienić ustawienie, musisz udostępnić klientowi nowe pliki binarne.
John L4
@ JohnL4 jeśli te ustawienia są w zakresie „użytkownika”, możesz je zmienić programowo, np.Settings.Default.Test = "abc"; Settings.Default.Save();
Peet Brits
10

Powinieneś utworzyć plik App.config (bardzo podobny do web.config ).

Należy kliknąć prawym przyciskiem myszy projekt, dodać nowy element i wybrać nowy „Plik konfiguracyjny aplikacji” .

Upewnij się, że dodajesz za pomocą System.Configuration w projekcie.

Następnie możesz dodać do niego wartości:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="setting1" value="key"/>
  </appSettings>
  <connectionStrings>
    <add name="prod" connectionString="YourConnectionString"/>
  </connectionStrings>
</configuration>

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }

Uwaga: według Microsoftu powinieneś używać ConfigurationManager zamiast ConfigurationSettings (zobacz sekcję uwagi):

„Klasa ConfigurationSettings zapewnia tylko zgodność wsteczną. W przypadku nowych aplikacji należy zamiast tego użyć klasy ConfigurationManager lub klasy WebConfigurationManager”.

Nathan Koop
źródło
Bardzo pomocny. Rozwiązałem mój problem z T.
JCMorris
W programie Visual Studio 2015: kliknij pozycję projekt> Dodaj odwołanie. Przewiń w dół do połowy, aby znaleźć System.Configuration Kliknij OK, a następnie zaktualizuj wiersz kodu zgodnie z komentarzem Nathana.
Robot70
7

Domyślna nazwa pliku konfiguracyjnego to [yourexe] .exe.config. Tak więc notepad.exe będzie miał plik konfiguracyjny o nazwie notepad.exe.config, w tym samym folderze co program. To jest ogólny plik konfiguracyjny dla wszystkich aspektów środowiska CLR i struktury, ale może zawierać własne ustawienia w <appSettings>węźle.

<appSettings>Elementem tworzy zbiór par nazwa-wartość, które mogą być dostępne jako System.Configuration.ConfigurationSettings.AppSettings. Nie ma jednak możliwości zapisania zmian z powrotem w pliku konfiguracyjnym.

Możliwe jest również dodanie własnych elementów niestandardowych do pliku konfiguracyjnego - na przykład w celu zdefiniowania ustrukturyzowanego ustawienia - poprzez utworzenie klasy, która implementuje IConfigurationSectionHandleri dodanie jej do <configSections>elementu pliku konfiguracyjnego. Możesz wtedy uzyskać do niego dostęp dzwoniąc ConfigurationSettings.GetConfig.

.NET 2.0 dodaje nową klasę, System.Configuration.ConfigurationManagerktóra obsługuje wiele plików, z nadpisywaniem danych dla każdego systemu przez użytkownika. Obsługuje również zapisywanie zmodyfikowanych konfiguracji z powrotem do plików ustawień.

Visual Studio tworzy plik o nazwie App.config, który kopiuje do folderu EXE o poprawnej nazwie podczas budowania projektu.

Mike Dimmick
źródło
6

Najlepszy artykuł (IMHO) o konfiguracji aplikacji .NET jest w CodeProject, Unraveling the Mysteries of .NET 2.0 Configuration . Mój następny ulubiony (krótszy) artykuł o sekcjach w plikach konfiguracyjnych .NET to Zrozumienie obsługi sekcji - plik App.config .

TcKs
źródło
To naprawdę nie jest najprostszy sposób zadany przez użytkownika, ale Odkrywanie tajemnic konfiguracji .NET 2.0 to naprawdę świetna seria artykułów.
Ricardo Amores
3

W Windows Forms masz app.configplik, który jest bardzo podobny do web.configpliku. Ale ponieważ widzę, że potrzebujesz tego do niestandardowych wartości, sugeruję użycie Ustawień .

Aby to zrobić, otwórz właściwości projektu, a następnie przejdź do ustawień. Jeśli plik ustawień nie istnieje, będziesz mieć łącze do jego utworzenia. Następnie możesz dodać ustawienia do tabeli, którą tam widzisz, co wygeneruje zarówno odpowiedni kod XML, jak i klasę ustawień, której można użyć do załadowania i zapisania ustawień.

Klasa ustawień otrzyma nazwę podobną do DefaultNamespace.Properties.Settings. Następnie możesz użyć kodu podobnego do:

using DefaultNamespace.Properties;

namespace DefaultNamespace {
    class Class {
        public int LoadMySettingValue() {
            return Settings.Default.MySettingValue;
        }
        public void SaveMySettingValue(int value) {
            Settings.Default.MySettingValue = value;
        }
    }
}
konfigurator
źródło
2

Zgadzam się z innymi odpowiedziami, które wskazują na app.config. Jednak zamiast czytać wartości bezpośrednio z pliku app.config, należy utworzyć klasę narzędziową (używam nazwy AppSettings), aby je odczytać i udostępnić jako właściwości. Klasa AppSettings może służyć do agregowania ustawień z kilku sklepów, takich jak wartości z pliku app.config i informacje o wersji aplikacji z zestawu (AssemblyVersion i AssemblyFileVersion).

Jamie Ide
źródło
1

Posługiwać się:

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

AppSettings zostało wycofane i jest teraz uważane za przestarzałe ( link ).

Ponadto sekcja appSettings w pliku app.config została zastąpiona sekcją applicationSettings .

Jak ktoś inny wspomniał, powinieneś używać System.Configuration.ConfigurationManager ( link ), który jest nowością w .NET 2.0.

Edward Manning
źródło
ConfigurationSettings jest przestarzałe, a nie AppSettings.
Toby
0

Jakiej wersji .NET i Visual Studio używasz?

Po utworzeniu nowego projektu w rozwiązaniu powinien znajdować się plik o nazwie app.config . To jest domyślny plik konfiguracyjny.

Geoff
źródło