Windows Forms C # uygulamasında bir yapılandırma dosyasına sahip olmanın en basit yolu


88

.NET'te gerçekten yeniyim ve yapılandırma dosyalarının nasıl çalıştığı konusunda hala takılmadım.

Google'da bununla ilgili her arama yaptığımda web.config ile ilgili sonuçlar alıyorum, ancak bir Windows Forms uygulaması yazıyorum.

System.Configuration ad alanını kullanmam gerektiğini anladım, ancak dokümantasyon yardımcı olmuyor.

Yapılandırma dosyamın XYZ.xml olduğunu nasıl tanımlarım? Veya yapılandırma dosyası için "varsayılan" bir adı var mı? Hâlâ anlamadım.

Ayrıca, yeni bir bölümü nasıl tanımlarım? ConfigurationSection'dan miras alan bir sınıf oluşturmam gerekiyor mu?

Bunun gibi bazı değerlere sahip bir yapılandırma dosyasına sahip olmak istiyorum:

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

Bunu yapmanın basit bir yolu var mı? Basit bir yapılandırma dosyasını nasıl okuyup yazacağınızı basit bir şekilde açıklayabilir misiniz?


1
.NET sürümünüz nedir? 2.0 ve üstü için, Ayarlar adında çok şirin bir yol var.
Thomas

1
@Yedi bir yazım hatasıydı ancak "Bir örnekle açıkla" anlamına gelebilir :)
Fabio Gomes

Yanıtlar:


123

Bir App.Config kullanmak istiyorsunuz.

Bir projeye yeni bir öğe eklediğinizde, Uygulamalar Yapılandırma dosyası adı verilen bir şey vardır. Bunu ekleyin.

Ardından, yapılandırma / appsettings bölümüne anahtarlar eklersiniz

Sevmek:

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

Yaparak üyelere erişin

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

Bu, .NET 2 ve üzerinde çalışır.


2
Aslında, v1.0'dan itibaren .NET'in tüm sürümlerinde çalışır. .NET 2.0'daki yeni sınıf ConfigurationManager'dır.
Mike Dimmick

4
Ben şahsen "Uygulama Özellikleri" ndeki "Ayarlar" sekmesini kullanıyorum (yalnızca Framework 2.0 sonrası) çünkü Visual Studio, ayarlarınız için kesin olarak yazılmış özellikleri kodlayacaktır. Çalışma zamanında okunan / yazılan "Kullanıcı" ayarlarını da içerebilirler.
Adrian Clark

@Mike evet, durumun böyle olduğunu hissettim, ama çok emin değildim. 1. ile pek çalışmadım.
qui

26
ConfigurationSettingsEski olduğunu unutmayın , kullanın System.Configuration.ConfigurationManager.AppSettings["MyKey"];.
JNF

16
Ayrıca bir not, System.Configuration.ConfigurationManagerprojenizi kullanmak içinSystem.Configuration.dll
dmeglio

66

Önceki cevapların açıklaması ...

  1. Projenize yeni bir dosya ekleyin ( EkleYeni ÖğeUygulama Yapılandırma Dosyası )

  2. Yeni yapılandırma dosyası Solution Explorer'da App.Config olarak görünecektir .

  3. Aşağıdakileri şablon olarak kullanarak ayarlarınızı bu dosyaya ekleyin

    <configuration>
      <appSettings>
        <add key="setting1" value="key"/>
      </appSettings>
      <connectionStrings>
        <add name="prod" connectionString="YourConnectionString"/>
      </connectionStrings>
    </configuration>
    
  4. Onları şu şekilde geri alın:

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }
    
  5. Oluşturulduğunda, çıktı klasörünüz <montajadı> .exe.config adlı bir dosya içerecektir. Bu, App.Config dosyasının bir kopyası olacaktır . Bu dosyayı oluşturmak için geliştirici tarafından başka bir çalışma yapılmasına gerek yoktur.


1
Bu benim için faydalı oldu. Diğer iki nokta: Yeni dosyayı projeye eklerken, iletişim kutusunun sol tarafındaki Genel düğüme tıkladığımda Uygulama Yapılandırma Dosyası bulundu. ConfigurationManager sınıfını kodumda kullanmak için referanslarıma System.Configuration DLL'yi eklemem gerekiyordu.
John Gilmer

28

Önceki yanıtların hızlı bir şekilde okunmasıyla doğru görünüyorlar, ancak Visual Studio 2008'deki yeni yapılandırma olanaklarından kimsenin bahsetmediği görülüyor . Hala app.config kullanıyor (derleme zamanında YourAppName.exe.config'e kopyalanır), ancak özellikleri ayarlamak ve türlerini belirlemek için bir UI widget'ı vardır. Projenizin "Özellikler" klasöründe Settings.settings'e çift ​​tıklayın .

En iyi bölüm, bu özelliğe koddan erişmenin tip güvenli olmasıdır - derleyici, özellik adını yanlış yazmak gibi bariz hataları yakalayacaktır. Örneğin, app.config dosyasındaki MyConnectionString adlı bir özelliğe şu şekilde erişilebilir:

string s = Properties.Settings.Default.MyConnectionString;

Bu, VS2005'te mevcuttu.
Greg D

5
Güzel, ancak (Proje Özellikleri | Ayarlar) derlenmesi gereken kodu üretir. Bir ayarı değiştirmek isterseniz, müşteriye yeni ikili dosyalar yayınlamanız gerekir.
JohnL4

@ JohnL4 eğer bu ayarlar "kullanıcı" kapsamındaysa, bunu programlı olarak değiştirebilirsiniz, örneğinSettings.Default.Test = "abc"; Settings.Default.Save();
Peet Brits

10

Bir App.config dosyası oluşturmalısınız ( web.config'e çok benzer ).

Projenize sağ tıklamanız, yeni öğe eklemeniz ve yeni "Uygulama Yapılandırma Dosyası" nı seçmeniz gerekir .

Projenize System.Configuration kullanarak eklediğinizden emin olun.

Sonra ona değerler ekleyebilirsiniz:

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

Sadece bir not: Microsoft'a göre ConfigurationSettings yerine ConfigurationManager kullanmalısınız (açıklamalar bölümüne bakın):

"ConfigurationSettings sınıfı yalnızca geriye dönük uyumluluk sağlar. Yeni uygulamalar için bunun yerine ConfigurationManager sınıfını veya WebConfigurationManager sınıfını kullanmalısınız."


Çok yararlı.
Sorunumu

Visual Studio 2015'te: Proje> Başvuru Ekle'ye tıklayın. System.Configuration'ı bulmak için yarıya kadar kaydırın Tamam'a tıklayın, ardından Nathan'ın yorumuna göre kod satırını güncelleyin.
Robot70

7

Bir yapılandırma dosyasının varsayılan adı [yourexe] .exe.config şeklindedir. Bu nedenle notepad.exe, programla aynı klasörde notepad.exe.config adlı bir yapılandırma dosyasına sahip olacaktır. Bu, CLR ve Framework'ün tüm yönleri için genel bir yapılandırma dosyasıdır, ancak bir <appSettings>düğüm altında kendi ayarlarınızı içerebilir .

<appSettings>Eleman olarak erişilebilir adı değer çifti bir koleksiyon oluşturur System.Configuration.ConfigurationSettings.AppSettings. Bununla birlikte, değişiklikleri yapılandırma dosyasına geri kaydetmenin bir yolu yoktur.

Kendi özel öğelerinizi bir yapılandırma dosyasına eklemek de mümkündür - örneğin, yapılandırılmış bir ayar tanımlamak için - bunu uygulayan bir sınıf oluşturup yapılandırma dosyasının öğesine IConfigurationSectionHandlerekleyerek <configSections>. Daha sonra arayarak erişebilirsiniz ConfigurationSettings.GetConfig.

.NET 2.0, System.Configuration.ConfigurationManagersistem başına verileri kullanıcı başına geçersiz kılmalarla birden çok dosyayı destekleyen yeni bir sınıf ekler . Ayrıca, değiştirilen yapılandırmaları ayarlar dosyalarına geri kaydetmeyi de destekler.

Visual Studio App.config, proje oluşturulduğunda doğru adla EXE klasörüne kopyaladığı adlı bir dosya oluşturur .


6

.NET Uygulama yapılandırmasıyla ilgili en iyi (IMHO) makale, CodeProject, .NET 2.0 Yapılandırmasının Gizemlerini Çözme üzerinedir . Ve .NET yapılandırma dosyalarındaki bölümlerle ilgili bir sonraki favori (daha kısa) makalem Bölüm İşleyicilerini Anlamak - App.config Dosyası .


Gerçekten kullanıcı tarafından istenen en basit yol değil, ancak .NET 2.0 yapılandırmalarının gizemlerini çözmek gerçekten harika bir makale dizisidir.
Ricardo Amores

3

Windows Forms'da, app.configdosyaya çok benzeyen dosyaya sahipsiniz web.config. Ancak ihtiyacın olduğunu gördüğüm şey özel değerler olduğundan, Ayarları kullanmanızı öneririm .

Bunu yapmak için proje özelliklerinizi açın ve ardından ayarlara gidin. Bir ayarlar dosyası yoksa, bir tane oluşturmak için bir bağlantınız olacaktır. Ardından, hem uygun XML'i hem de ayarları yüklemek ve kaydetmek için kullanılabilecek bir Settings sınıfını oluşturan ayarları orada gördüğünüz tabloya ekleyebilirsiniz .

Ayarlar sınıfı şunun gibi adlandırılacaktır DefaultNamespace.Properties.Settings. Ardından, şuna benzer bir kod kullanabilirsiniz:

using DefaultNamespace.Properties;

namespace DefaultNamespace {
    class Class {
        public int LoadMySettingValue() {
            return Settings.Default.MySettingValue;
        }
        public void SaveMySettingValue(int value) {
            Settings.Default.MySettingValue = value;
        }
    }
}

2

Sizi app.config'e yönlendiren diğer yanıtlara katılıyorum. Bununla birlikte, değerleri doğrudan app.config'den okumak yerine, onları okumak ve özellikler olarak göstermek için bir yardımcı program sınıfı (AppSettings, kullandığım addır) oluşturmalısınız. AppSettings sınıfı, app.config'deki değerler ve derlemedeki uygulama sürümü bilgileri (AssemblyVersion ve AssemblyFileVersion) gibi çeşitli mağazalardan ayarları toplamak için kullanılabilir.



1

Kullanım:

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

AppSettings kullanımdan kaldırıldı ve artık eski ( bağlantı ) olarak kabul ediliyor .

Ek olarak, app.config dosyasının appSettings bölümü , applicationSettings bölümü ile değiştirilmiştir .

Başka birinin bahsettiği gibi, .NET 2.0 için yeni olan System.Configuration.ConfigurationManager ( bağlantı ) kullanıyor olmalısınız .


ConfigurationSettings, AppSettings değil kullanımdan kaldırılmıştır.
Toby

0

NET ve Visual Studio'nun hangi sürümünü kullanıyorsunuz?

Yeni projeyi oluşturduğunuzda, çözümünüzde app.config adında bir dosyanız olmalıdır . Bu, varsayılan yapılandırma dosyasıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.