Ładowanie niestandardowych plików konfiguracyjnych

119

Wiem, że mogę otwierać pliki konfiguracyjne, które są związane z zestawem ConfigurationManager.OpenExe(exePath)metodą statyczną , ale chcę tylko otworzyć konfigurację, która nie jest związana z zespołem. Tylko standardowy plik konfiguracyjny .NET.

Adam
źródło

Odpowiedzi:

244

artykuły opublikowane przez Ricky'ego są bardzo dobre, ale niestety nie odpowiadają na twoje pytanie.

Aby rozwiązać problem, wypróbuj ten fragment kodu:

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

Jeśli potrzebujesz dostępu do wartości w konfiguracji, możesz użyć operatora indeksu:

config.AppSettings.Settings["test"].Value;
Oliver
źródło
1
@Oliver By whateverYouLikeExtension, czy masz na myśli, że musisz mieć coś później config.?
Svish
4
@Oliver Teraz chciałem spróbować i wydaje się działać dobrze bez :)
Svish
1
Zrobiłem to, ale kiedy uzyskuję dostęp do ConfigurationManager.ConnectionStrings, nadal otrzymuję stare dane. czego mi brakuje?
MAW74656
1
@ MAW74656: Nie musisz mieć dostępu ConfigurationManager.ConnectionStrings. Zamiast tego musisz odczytać wartość z configobiektu zwróconego z ostatniej instrukcji powyżej.
Oliver
3
Dla każdego, kto szuka sposobu na pobranie appSettings po wykonaniu tej czynności: var foo = config.AppSettings.Settings ["test"]. Value;
Roro
8

Plik konfiguracyjny to po prostu plik XML, możesz go otworzyć przez:

private static XmlDocument loadConfigDocument()
{
    XmlDocument doc = null;
    try
    {
        doc = new XmlDocument();
        doc.Load(getConfigFilePath());
        return doc;
    }
    catch (System.IO.FileNotFoundException e)
    {
        throw new Exception("No configuration file found.", e);
    }
    catch (Exception ex)
    {
        return null;
    }
}

a później pobieranie wartości przez:

    // retrieve appSettings node

    XmlNode node =  doc.SelectSingleNode("//appSettings");
Otávio Décio
źródło
Wykryto nieosiągalny kod po throw new Exception("No configuration file found.", e);.
Oybek
Usunę zwrot null, tak naprawdę nie zostanie osiągnięty.
Otávio Décio
7
po co używać XML, skoro masz tak świetne klasy z biblioteki .Net. Nie sugerowałbym używania tego, kiepskiego projektu. Co następne? zaimplementuj inną klasę łańcuchów ... rozważ to.
Yuki
@ OtávioDécio Czy mogę dodać system.diagnostics, aby włączyć śledzenie w niestandardowym pliku .config?
FaizanHussainRabbani
@FaizanRabbani nie mam pewności co do niestandardowego śledzenia, ale zgodnie z msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx powinno być możliwe dodanie diagnostyki do pliku konfiguracyjnego.
Otávio Décio