Co to jest App.config w C # .NET? Jak tego użyć?

179

Zrobiłem projekt w C # .NET, w którym mój plik bazy danych jest skoroszytem programu Excel. Ponieważ lokalizacja ciągu połączenia jest zakodowana na stałe w moim kodzie, nie ma problemu z zainstalowaniem go w moim systemie, ale w przypadku innych systemów jest.

Czy istnieje sposób, aby poprosić użytkownika o ustawienie ścieżki po zakończeniu instalacji aplikacji?

Odpowiedzi, które otrzymałem, brzmiały: „Użyj App.Config”… czy ktoś może powiedzieć, co to jest ten plik App.config i jak go używać w moim kontekście?

nieśmiały
źródło
4
możliwy duplikat Do czego służy app.config?
użytkownik

Odpowiedzi:

190

Mówiąc najprościej, app.config jest plikiem XML z wieloma predefiniowanymi sekcjami konfiguracyjnymi i obsługą niestandardowych sekcji konfiguracyjnych. „Sekcja konfiguracji” to fragment kodu XML ze schematem przeznaczonym do przechowywania pewnego rodzaju informacji.

Ustawienia można skonfigurować za pomocą wbudowanych sekcji konfiguracyjnych, takich jak connectionStringslub appSettings. Możesz dodać własne sekcje konfiguracji niestandardowej; jest to temat zaawansowany, ale bardzo przydatny do tworzenia plików konfiguracyjnych o jednoznacznie określonym typie.

Aplikacje internetowe zwykle mają plik web.config, podczas gdy aplikacje GUI / usługi systemu Windows mają plik app.config.

Pliki konfiguracyjne na poziomie aplikacji dziedziczą ustawienia z globalnych plików konfiguracyjnych, np. Machine.config.

Czytanie z App.Config

Parametry połączenia mają wstępnie zdefiniowany schemat, którego można użyć. Zauważ, że ten mały fragment jest w rzeczywistości prawidłowym plikiem app.config (lub web.config):

<?xml version="1.0"?>
<configuration>
    <connectionStrings>   
        <add name="MyKey" 
             connectionString="Data Source=localhost;Initial Catalog=ABC;"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

Po zdefiniowaniu pliku app.config można go odczytać w kodzie za pomocą klasy ConfigurationManager . Nie daj się zastraszyć szczegółowymi przykładami MSDN; to właściwie całkiem proste.

string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;

Pisanie do App.Config

Częsta zmiana plików * .config zwykle nie jest dobrym pomysłem, ale wygląda na to, że chcesz przeprowadzić tylko jednorazową konfigurację.

Zobacz: Zmiana parametrów połączenia i ponowne załadowanieconnectionStrings pliku app.config w czasie wykonywania, który opisuje, jak zaktualizować sekcję pliku * .config w czasie wykonywania.

Zwróć uwagę, że idealnie byłoby wykonać takie zmiany konfiguracji za pomocą prostego instalatora.

Lokalizacja App.Config w czasie wykonywania

P : Załóżmy, że ręcznie zmienię część <value>pliku app.config, zapiszę go, a następnie zamknę. Kiedy teraz przechodzę do folderu bin i uruchamiam stąd plik .exe, dlaczego nie odzwierciedla on zastosowanych zmian?

Odp . : Kiedy kompilujesz aplikację, jej plik app.config jest kopiowany do katalogu bin 1 z nazwą pasującą do twojego exe. Na przykład, jeśli plik exe został nazwany „test.exe”, w katalogu bin powinien znajdować się plik „text.exe.config”. Możesz zmienić konfigurację bez ponownej kompilacji, ale będziesz musiał edytować plik konfiguracyjny, który został utworzony w czasie kompilacji, a nie oryginalny plik app.config.

1: Zwróć uwagę, że pliki web.config nie są przenoszone, ale zamiast tego pozostają w tej samej lokalizacji podczas kompilacji i wdrażania. Jedynym wyjątkiem jest sytuacja, gdy plik web.config jest przekształcany .

.NET Core

Nowe opcje konfiguracji zostały wprowadzone w .NET Core. Wygląda na to, że sposób działania plików * .config nie zmienił się, ale programiści mają swobodę wyboru nowych, bardziej elastycznych paradygmatów konfiguracji.

Tim Medora
źródło
Zobacz też: codeproject.com/Articles/16466/ ... aby zapoznać się ze sposobem działania plików konfiguracyjnych
BKSpurgeon
56

Po prostu App.config to XMLoparty na formacie pliku, który przechowuje konfiguracje poziomu aplikacji .

Przykład:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="key" value="test" />
  </appSettings>
</configuration>

Dostęp do konfiguracji można uzyskać, korzystając ConfigurationManagerz poniższego fragmentu kodu:

var value = System.Configuration.ConfigurationManager.AppSettings["key"];
// value is now "test"

Uwaga: ConfigurationSettings jest przestarzałą metodą pobierania informacji o konfiguracji.

var value = System.Configuration.ConfigurationSettings.AppSettings["key"];
Furqan Safdar
źródło
21
System.Configuration.dllAby korzystać z wyżej wymienionych interfejsów API, musisz się odwołać .
KFL
2
Po pierwsze, nie należy przechowywać parametrów połączenia w sekcji AppSettings, ale znajdują się one w sekcji ConnectionStrings. Po drugie, program Visual Studio wygeneruje silnie wpisane właściwości dla twoich ustawień, jeśli utworzysz je poprawnie za pomocą projektanta, nigdy nie powinieneś ręcznie wpisywać nazwy klucza (tak jak w powyższym kodzie).
BrainSlugs83
1
Nie mówimy tutaj o najlepszych praktykach, ale raczej o rozwiązaniu problemu OP.
Furqan Safdar
2
System.Configuration.ConfigurationManager.AppSettings["Key"]jest już łańcuchem, wywołanie ToString()go jest zbędne.
Bogdan Stăimentscu
4

Dodam tylko coś, czego brakowało mi we wszystkich odpowiedziach - nawet jeśli wydaje się to głupie i oczywiste, gdy tylko się dowiesz:

Plik musi mieć nazwę „App.config” lub „app.config” i może znajdować się w Twoim projekcie na tym samym poziomie, co np. Program.cs.

Nie wiem, czy inne lokalizacje są możliwe, inne nazwy (jak application.conf, jak sugeruje dokumentacja ODP.net) nie działają dla mnie.

PS. Zacząłem od Visual Studio Code i utworzyłem nowy projekt z „dotnet new”. W tym przypadku nie jest tworzony plik konfiguracyjny, jestem pewien, że istnieją inne przypadki. PPS. Może być konieczne dodanie pakietu NuGet, aby móc odczytać plik konfiguracyjny, w przypadku .NET CORE będzie to „dotnet add pakiet System.Configuration.ConfigurationManager --version 4.5.0”

Dantel35
źródło
to jest to, czego szukałem. Musiałem wiedzieć, na jakim poziomie to uwzględnić. Niektóre programy / frameworki wyglądają w folderach takich jak/resources
alex
3

App.Config to plik XML, który jest używany jako plik konfiguracyjny aplikacji. Innymi słowy, przechowujesz w nim dowolne ustawienia, które możesz chcieć zmienić bez konieczności zmiany kodu (i ponownej kompilacji). Jest często używany do przechowywania parametrów połączenia.

Zobacz ten artykuł MSDN, aby dowiedzieć się, jak to zrobić.

System wyłączony
źródło
1

Dostęp do kluczy można uzyskać w aplikacji. Konfiguruj za pomocą:

ConfigurationSettings.AppSettings["KeyName"]

Spójrz na ten wątek

PochmurnoMarmur
źródło
16
jest teraz uważany za przestarzały
mikus
0

Dodam jeszcze jeden punkt

Używając app.config, w jaki sposób możesz kontrolować dostęp do aplikacji, chcesz zastosować określoną zmianę w całej aplikacji, użyj pliku konfiguracyjnego aplikacji i możesz uzyskać dostęp do ustawień, takich jak poniżej ConfigurationSettings.AppSettings ["Key"]

Gummadidala Shiva
źródło