C# App.config fájl tartalma ne álljon mindig alapra

C# App.config fájl tartalma ne álljon mindig alapra
2014-02-17T16:39:29+01:00
2014-02-18T19:50:40+01:00
2022-11-30T13:41:55+01:00
nyamnyam
Sziasztok!

Létrehoztam egy Application Configuration fájlt, melynek az alábbi a tartalma:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="kulcs1" value="érték1"/> <add key="kulcs2" value="érték2"/> <add key="kulcs3" value="érték3"/> </appSettings> </configuration>

A programom átírja az egyik kulcs értékét, mondjuk kulcs2-ét valami másra.
A gondom az, hogy ahányszor Start Debugging-al lefuttatom a programot, (gondolom értelem szerűen) mindig ez lesz újra a fájl tartalma, hiába adtam más értéket a program előző lefuttatásakor.
Amikor simán a létrerhozott exe fájlt futtatom, akkor persze mindig megmarad a már előző futtatás alkalmával beállított érték a fájlban.
Mit kellene, vagy hogyan kellene csinálnom, hogy a program fejlesztése során se állítsa alapra a fájl tartalmát a Visual Studio?


Mutasd a teljes hozzászólást!
Feleslegesen bonyolítod te is.

Fenti módszerrel GUI-n létrehozva típust is definiálhatsz, és a kódban típusbiztosan hivatkozhatsz rá.

Using Settings in C#
Mutasd a teljes hozzászólást!

  • Hol írtad át az app.config-ot.

    A project mappában levő app.config fájtl írtad át, vagy az exe mellett lévő YourApplicationName.config fájlt.

    Ha a másodikat akkor ne csodálkozz, hiszen minden újrafordításnál, másolódik. felülíródik.
    Mutasd a teljes hozzászólást!
  • Hát igen, nem csodálkozom. Csak azt nem tudom, hogyan kellene csinálnom, hogy jó legyen.
    Ezzel a kóddal írom át az értéket:

    Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); config.AppSettings.Settings["kulcs2"].Value = this.textBox_kulcs2Ertek.Text; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings");

    Mi nem jó benne?
    Mutasd a teljes hozzászólást!
  • Tedd bele ezt a kódot StartUp metódusba, és akkor mindig bele fog íródni a fájlba
    Mutasd a teljes hozzászólást!
  • A StartUp metódusba?
    Mire gondolsz?
    Mutasd a teljes hozzászólást!
  • App.xaml megnyitod és elkezded begépelni, hogy startup és csinálsz egy eventhandlert....

    <Application x:Class="WpfApplication6.App"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml" Startup="Application_Startup"> <Application.Resources> </Application.Resources> </Application>
    Mutasd a teljes hozzászólást!
  • Megnyitom? Nincs is ilyen fájl a project-ben. Vagy létrehozzak egy ilyen fájlt?
    Meg aztán ez a xaml kód. Hogyan következik ebből az, hogy úgy tudjak dolgozni a programon, hogy mindig az utoljára a config fájlba írt értéket kapjam vissza?
    Ebből egy kukkot sem értek.
    Ennyire bonyis lenne egy mezei érték eltárolása egy konfigurációs fájlba?
    Akkor inkább írok egy saját config fájl kezelőt.
    Mutasd a teljes hozzászólást!
  • Ennyire bonyis lenne egy mezei érték eltárolása egy konfigurációs fájlba?

    Nem, nem az.

    Projecten jobb gomb -> Properties -> Settings fül -> Itt GUI-n tudod létrehozni a szükséges értékeket, és a kódban Properties.Settings.Default.<név> property-n tudsz rá hivatkozni.
    Mutasd a teljes hozzászólást!
  • Nem szoktam az App.configba írogatni, elég babrás és kiszedni az infót is az.
    Továbbá nem típusbiztos.

    Csinálsz egy publikus osztályt, legyen paraméter nélküli publikus konstruktora. Létrehozod az adattagokat, feltöltöd, kiszérializálod xml-be, és kész is a remek config állományod, amit könnyen bővíthetsz, nem kell bohóckodni a kulcsokkal, meg a típusokkal.

    A program indulásakor megnézed , hogy van e Config.xml-ed, ha nincs letárolod a defaultot, ha van felolvasod a tartalmát/deszérializálod, és már ott is van egy objektum, vagy objektum fa, ami az összes konfigot tartalmazhatja.
    Mutasd a teljes hozzászólást!
  • Van ilyen fájl, vgy ha nincs akkor nem WPF-es az alkalmazás....
    Mutasd a teljes hozzászólást!
  • Feleslegesen bonyolítod te is.

    Fenti módszerrel GUI-n létrehozva típust is definiálhatsz, és a kódban típusbiztosan hivatkozhatsz rá.

    Using Settings in C#
    Mutasd a teljes hozzászólást!
  • Nem biztos... Néha jó ha csak azokat a konfig objektumokat adod át egy osztálypéldánynak ami rá tartozik...
    Mutasd a teljes hozzászólást!
  • Ez a feature pont erre van kitalálva.

    Lehet rá persze n-rétegű keretrendszert is írni, ha sok az időd, ha a megrendelő mennyiségben méri a kódot, vagy ha azon megy a verseny, hogy hogy lehet minél bonyolultabban megoldani egy egyszerű problémát.
    Mutasd a teljes hozzászólást!
  • Kukipapa! Ez jóval egyszerűbb, amit te írtál, csak a problémám nem változott még ettől sem.
    Nevezetesen az, hogy a program tesztelgetése közben, a Visual Studio-ban Start Debugging-galindítva, mindig a kezdő értéket és nem az utoljára beírtat kapom vissza.
    Mutasd a teljes hozzászólást!
  • Olvasd végig a feljebb linkelt MSDN leírást!

    Ha a scope-ot User-re állítod, a

    Properties.Settings.Default.Save();

    meghívásával a változások az éppen bejelentkezett felhasználó számára el lesznek mentve a %localappdata% folder-be, és indításkor automatikusan be is lesznek töltve.

    Ezzel szemben az Application scope választása esetén az read-only: vagy VS-ből változtatod meg az értékét, vagy közvetlenül a deploy-olt Bin könyvtárban levő .config-ban módosíthatod azt (de egy Clean után az elveszik, és a VS-ben definiált default írja azt felül).

    Neked kell eldönteni, hogy az adott beállítás alapvetően mire kell. Pl. én Application scope-ot olyan jellegű config adatokra szoktam használni, amelyek alapvetően nem változnak, de nem kéne hard code-olni a programba (pl. connection string-ek). A felhasználó beállításai értelemszerűen mehetnek a User scope-ba vagy adatbázisba.

    Ezen kívül ha a fejlesztés megköveteli, lehetőség van többféle indítási beállítás közül választani: "Using Alternate Sets of Settings" rész a doksiban. Ez utóbbit mondjuk én még nem használtam.

    Összegezve: alapvetően a felhasználási szándéktól függ, melyik irányba kéne elmenned.
    Mutasd a teljes hozzászólást!
  • Még egy gondolat: ez amiatt van így, mert a programod tipikusan a csak olvasható (admin joggal írható) Program Files-ba kerül telepítésre, így az ott levő app.config-ban nem célszerű változó beállításokat tárolni (különben a programodat csak admin joggal lehet majd futtatni).

    A %localappdata% folder sima felhasználói joggal írható, ráadásul így minden felhasználó személyre szabott beállítással rendelkezhet.
    Mutasd a teljes hozzászólást!
  • Ez kell nekem!
    Köszönöm szépen a válaszokat és a segítséget!
    Megint tanultam valamit.
    Tiéd a pont Kukipapa.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd