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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top