Ik heb een project in C#.NET gedaan waarbij mijn databankbestand een Excel-werkmap is. Aangezien de locatie van de connectiestring hard gecodeerd is in mijn codering, is er geen probleem om het in mijn systeem te installeren, maar voor andere systemen wel.
Is er een manier om de gebruiker te vragen eenmalig een pad in te stellen nadat de setup van de applicatie is voltooid?
De antwoorden die ik kreeg was "Use App.Config"... kan iemand vertellen wat deze App.config is en hoe het te gebruiken in mijn context hier?
Op zijn eenvoudigst is de app.config een XML-bestand met veel voorgedefinieerde configuratiesecties en ondersteuning voor aangepaste configuratiesecties. Een "configuration section" is een stukje XML met een schema bedoeld om een bepaald soort informatie in op te slaan.
Instellingen kunnen worden geconfigureerd met behulp van ingebouwde configuratiesecties zoals connectionStrings
of appSettings
. U kunt uw eigen aangepaste configuratie secties toevoegen; dit is een geavanceerd onderwerp, maar zeer krachtig voor het bouwen van sterk getypeerde configuratie bestanden.
Web applicaties hebben meestal een web.config, terwijl Windows GUI/service applicaties een app.config bestand hebben.
Applicatie-niveau configuratiebestanden erven instellingen van globale configuratiebestanden, bv. de machine.config.
Connection strings hebben een voorgedefinieerd schema dat je kan gebruiken. Merk op dat dit kleine knipsel eigenlijk een geldig app.config (of web.config) bestand is:
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="MyKey"
connectionString="Data Source=localhost;Initial Catalog=ABC;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
Eens je je app.config gedefinieerd hebt, kan je het in code lezen met de ConfigurationManager klasse. Laat je niet intimideren door de uitgebreide MSDN voorbeelden; het'is eigenlijk heel eenvoudig.
string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;
Vaak de *.config bestanden veranderen is meestal geen goed idee, maar het klinkt alsof je slechts een eenmalige setup wil uitvoeren.
Zie: https://stackoverflow.com/q/502411/453277 die beschrijft hoe je de connectionStrings
sectie van het *.config bestand kunt updaten tijdens runtime.
Merk op dat idealiter dergelijke configuratiewijzigingen vanuit een eenvoudig installatieprogramma worden uitgevoerd.
Q: Stel ik verander handmatig wat <value>
in app.config, sla het op en sluit het dan. Als ik nu naar mijn bin folder ga en het .exe bestand van hieruit start, waarom' geeft het dan niet de toegepaste veranderingen weer?
A: Wanneer u een toepassing compileert, wordt zijn app.config gekopieerd naar de bin-map1 met een naam die overeenkomt met uw exe. Bijvoorbeeld, als je exe de naam "test.exe" had, dan zou er een "text.exe.config" in je bin directory moeten staan. U kunt de configuratie wijzigen zonder een hercompilatie, maar u zult het config-bestand moeten bewerken dat tijdens het compileren is gemaakt, niet de originele app.config.
1: Merk op dat web.config bestanden niet verplaatst worden, maar in plaats daarvan op dezelfde plaats blijven op het moment van compileren en uitrollen. Een uitzondering hierop is wanneer een web.config wordt getransformeerd.
Met .NET Core zijn nieuwe configuratieopties geïntroduceerd. De manier waarop *.config-bestanden werken lijkt niet te zijn veranderd, maar ontwikkelaars zijn vrij om nieuwe, meer flexibele configuratieparadigma's te kiezen.
App.Config is een XML bestand dat gebruikt wordt als configuratiebestand voor je applicatie. Met andere woorden, je slaat er elke instelling in op die je zou willen veranderen zonder dat je code moet veranderen (en hercompileren). Het wordt vaak gebruikt om connectie strings in op te slaan.
Zie dit MSDN artikel over hoe je dat kunt doen.
U kunt sleutels in de App.Config openen met:
ConfigurationSettings.AppSettings["KeyName"]
Kijk eens naar deze Thread