2010-08-15 5 views
2

j'utilise gestionnaire de configuration de la façon la plus simple:ConfigurationManager recherche de fichiers différents sur des systèmes différents

Lire:

ConfigurationManager.AppSettings["Foo"] 

Ecrire:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings["Foo"].Value = value; 
config.Save(ConfigurationSaveMode.Modified); 
ConfigurationManager.RefreshSection("appSettings"); 

Le problème est que, après l'installation l'application sur des machines différentes - certains sont à la recherche du fichier: "My.Application.exe.config" tandis que d'autres recherchent "My.Application.config" (même, w/o e ".exe")

Un autre détail intéressant est qu'après avoir installé VS sur les machines problématiques - cela fonctionne bien.

Et ma question est: Ah? !!? Des idées?

+0

Pouvez-vous vous connecter comportement <- Version Windows? –

+1

Deviner. Mais si cela fonctionne après l'installation de VS, cela peut-il être corrigé dans .NET3.5 SP1? Modifier - J'ai trouvé une page MS Connect sur ce problème: https://connect.microsoft.com/VisualStudio/feedback/details/290821/configurationmanager-openexeconfiguration-misbehaves-on-some-platforms –

+0

Merci ... Ça fait du bien quand tu as quelqu'un à blâmer ... – Nissim

Répondre

0

Merci pour les réponses, vos liens ont été très utiles. Comme il s'agit d'un problème .NET (comme décrit dans les liens ci-dessus), je l'ai abordé sous un angle différent de celui suggéré: Comme mon fichier de configuration est vaste et nécessite des opérations de lecture et d'écriture, j'utilise une classe spéciale pour le gérer - configurationFileHelper.

Ce que je l'ai été l'ajout d'un constructeur statique à cette classe, où je suis curieux le nom attendu pour le fichier, et, le cas échéant, de renommer le fichier existant pour le match:

static configurationFileHelper() 
    { 
     try 
     { 
      string fullFilename = Application.ProductName + ".exe.config"; 
      string expectedFilename = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath; 
      if (!File.Exists(expectedFilename) && (File.Exists(fullFilename)) 
        File.Move(fullFilename, expectedFilename); 
     } 
     catch { ; } 
    } 

Espoir ceci est utile à quelqu'un ...

Questions connexes