2009-08-03 6 views
5

Ich habe vor kurzem auf Vista x64 verschoben, und plötzlich wird meine machine.config appSettings Block von keiner .NET-Assemblys gelesen.appSettings nicht aus Machine.config in Vista

Gleich nach configSections und vor configProtectedData in C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ machine.config, ich habe:

<appSettings> 
    <add key="foo" value="blah"/> 
</appSettings> 
<system.runtime.remoting> 
    <customErrors mode="Off"/> 
</system.runtime.remoting> 

Wäre es zu retten, indem Notepad ++ läuft als Administrator, weil es sonst gesperrt ist, wahrscheinlich aus guten Gründen. Das Ausführen den folgenden Code in SnippetCompiler oder VS .NET 2008:

foreach(var s in ConfigurationManager.AppSettings.AllKeys) 
    { 
     Console.WriteLine(s); 
    } 

    AppSettingsReader asr = new AppSettingsReader(); 

    Console.WriteLine(asr.GetValue("foo", typeof(string))); 

schreibt ohne Schlüssel und schlägt mit folgenden Ausnahme:

--- 
The following error occurred while executing the snippet: 
System.InvalidOperationException: The key 'foo' does not exist in the appSettings configuration section. 
    at System.Configuration.AppSettingsReader.GetValue(String key, Type type) 
    at MyClass.RunSnippet() 
    at MyClass.Main() 
--- 

Die App I verwendet machine.config als Ausweich schreibe für die Suche Aus welcher Umgebung ein Benutzer ausgeführt werden soll, wenn er nicht in der app.config gefunden wird, also möchte ich vermeiden, meine App neu schreiben zu müssen, um etwas herauszufinden, das genauso funktionieren sollte wie in 2000 und XP.

Antwort

7

es mit der folgenden Codezeile Gelöst:

ConfigurationManager.OpenMachineConfiguration().FilePath 

die zurückgegeben:

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Config\machine.config 

statt:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config 

vergessen ich jetzt 64 Bits bin mit. Das Hinzufügen des Abschnitts appSettings in der richtigen Konfigurationsdatei hat das Problem gelöst.