impostazioni dell'app non vengono lette da machine.config in Vista
-
10-07-2019 - |
Domanda
Di recente sono passato a Vista x64 e all'improvviso, il mio blocco machine.config appSettings non viene letto da alcun assembly .NET.
Subito dopo configSections e prima di configProtectedData in C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ machine.config, ho:
<appSettings>
<add key="foo" value="blah"/>
</appSettings>
<system.runtime.remoting>
<customErrors mode="Off"/>
</system.runtime.remoting>
Ho dovuto salvarlo eseguendo Notepad ++ come amministratore, perché altrimenti è bloccato, probabilmente per buoni motivi. Esecuzione del codice seguente in SnippetCompiler o VS .NET 2008:
foreach(var s in ConfigurationManager.AppSettings.AllKeys)
{
Console.WriteLine(s);
}
AppSettingsReader asr = new AppSettingsReader();
Console.WriteLine(asr.GetValue("foo", typeof(string)));
non scrive chiavi e fallisce con la seguente eccezione:
---
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()
---
L'app che scrivo usa machine.config come fallback per scoprire in quale ambiente un utente dovrebbe essere in esecuzione se non può essere trovato in app.config, quindi vorrei evitare di dover riscrivere la mia app per capire qualcosa che dovrebbe funzionare come nel 2000 e in XP.
Soluzione
Risolto con la seguente riga di codice:
ConfigurationManager.OpenMachineConfiguration().FilePath
che ha restituito:
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Config\machine.config
anziché:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config
Ho dimenticato che sto usando 64 bit ora. L'aggiunta della sezione appSettings nel file di configurazione corretto ha risolto il problema.