2009-08-03 7 views
5

J'ai récemment migré vers Vista x64, et soudain, mon bloc app.config machine.config n'est lu par aucun assembly .NET.appSettings n'étant pas lus à partir de machine.config dans Vista

Juste après configSections, et avant configProtectedData dans C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ machine.config, j'ai:

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

Nous avons dû l'enregistrer en exécutant Notepad ++ en tant qu'administrateur, parce qu'il est verrouillé autrement, probablement pour de bonnes raisons. Exécution du code suivant dans SnippetCompiler ou VS .NET 2008:

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

    AppSettingsReader asr = new AppSettingsReader(); 

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

écrit sur aucune touche et échoue avec l'exception suivante:

--- 
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'application que j'écris utilise machine.config comme solution de repli pour trouver dans quel environnement un utilisateur devrait fonctionner s'il ne peut pas être trouvé dans app.config, donc je voudrais éviter d'avoir à réécrire mon application pour comprendre quelque chose qui devrait fonctionner comme en 2000 et XP.

Répondre

7

a résolu le problème avec la ligne de code suivante:

ConfigurationManager.OpenMachineConfiguration().FilePath 

qui est retourné:

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

au lieu de:

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

oublié J'utilise 64 bits maintenant. L'ajout de la section appSettings dans le fichier de configuration approprié a résolu le problème.

Questions connexes