lecture du fichier app.config


131

J'essaie de lire StartingMonthColumn et CategoryHeadingColumn à partir du fichier app.config ci-dessous en utilisant le code

ConfigurationSettings.AppSettings["StartingMonthColumn"]

mais il renvoie null, également ConfigurationSettings.AppSettings.Count renvoie zéro

Aidez-moi à lire ceci dans mon application Windows

<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="CTARepository.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <CTARepository.Properties.Settings>
            <setting name="Setting" serializeAs="String">
                <value />
            </setting>
        </CTARepository.Properties.Settings>
    </userSettings>
    <appSettings>
        <add key="StartingMonthColumn" value="7"/>
        <add key="CategoryHeadingColumn" value="1"/>
    </appSettings>
</configuration>

Essayez-vous d'exécuter l'application à partir du dossier \ bin \ debug tout en modifiant le fichier de configuration à la racine du projet? Sinon, modifiez la configuration et reconstruisez le code après avoir exécuté un nettoyage.
Kangkan

1
Le fichier n'est pas nommé "app.config", n'est-ce pas? Il est nommé ainsi dans votre projet, bien sûr, mais dans le répertoire de sortie de l'application, il doit être nommé de la même manière que votre binaire de sortie + ".config" (comme "MyLibrary.dll.config" ou "MyProgram.exe.config ", etc ...)
BrainSlugs83

@ BrianSlugs83 merci mon pote, je me demandais pourquoi mon application plante. Maintenant, après deux jours de recherche partout, la réponse est ici dans le commentaire. Je viens d'avoir "app.config" et pas de "MyProgram.exe.config".
śmiglidigli

Veuillez consulter stackoverflow.com/questions/1189364/… pour la solution. Thanks
Ariful Islam

Réponses:


171

Paramètres de configuration .AppSettings est obsolète , vous devez utiliser Configuration Manager .AppSettings à la place (vous devrez ajouter une référence à System.Configuration )

int value = Int32.Parse(ConfigurationManager.AppSettings["StartingMonthColumn"]);

Si vous rencontrez toujours des problèmes pour lire les paramètres de votre application, vérifiez que votre app.configfichier est correctement nommé. Plus précisément, il doit être nommé en fonction de l'assembly en cours d'exécution, c'est MyApp.exe.config-à- dire , et doit résider dans le même répertoire que MyApp.exe.


2
Si ConfigurationSettings.AppSettings ["StartingMonthColumn"] renvoie null ou une chaîne vide, je soupçonnerais que Int32.Parse lèvera une exception en tentant d'analyser ces valeurs.
Bittercoder

@bittercoder, oui, cependant, votre fichier app.config devrait toujours avoir la configuration correcte de toute façon. Si l'OP veut y ajouter une forme de gestion, c'est-à-dire TryParse, alors il le peut. Cependant, ce n'était pas la question.
James

2
Notez que vous pouvez également accéder aux versions fortement typées des valeurs via Settings.Default. * (C'est-à-dire que dans ce cas, ce serait Settings.Default.StartingMonthColumn).
BrainSlugs83

@ BrainSlugs83 Notez que vous obtenez des paramètres utilisateur déroutants avec les paramètres de l'application. Si vous souhaitez un accès fortement typé aux paramètres de l'application, vous devez implémenter une section de configuration
James

Ce n'est pas correct, il extraira les valeurs de app.config indépendamment du fait que les valeurs soient étendues à "Utilisateur" ou "Application" (à partir du concepteur de l'interface graphique, vous pouvez choisir la portée de chaque paramètre).
BrainSlugs83

20

Juste pour la future référence, il vous suffit d'ajouter System.Configurationà votre bibliothèque de références:

entrez la description de l'image ici


2
votre réponse est meilleure que la première réponse ici, tout le monde a oublié de dire que vous devez ajouter une référence
essanousy

19

ConfigurationSettings.AppSettings est obsolète , voir ici:

http://msdn.microsoft.com/en-us/library/system.configuration.configurationsettings.appsettings.aspx

Cela dit, cela devrait toujours fonctionner.

Juste une suggestion, mais avez-vous confirmé que la configuration de votre application est celle que votre exécutable utilise?

Essayez de joindre un débogueur et de vérifier la valeur suivante:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

Et puis ouvrir le fichier de configuration et vérifier que la section est là comme vous vous y attendiez.


Salut Bittercoder quand j'essaye d'obtenir la valeur pour AppDomain.CurrentDomain.SetupInformation.ConfigurationFile j'obtiens C: \\ Program Files \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config qui n'est pas mon fichier de configuration ... ce qui devrait je fais
Sathish

C'est le bon fichier de configuration ... il se peut que vous ne vous y attendiez pas. En fait, dans ce cas, je crois que C: \ Program Files \ Microsoft Office \ OFFICE11 \ Excel.EXE.config est la configuration globale, et si vous placez un Excel.EXE.config nommé de manière similaire dans le même répertoire que votre assembly, c'est où les paramètres de votre application seront lus. Consultez ces liens pour plus de détails: dotnet247.com/247reference/msgs/56/281797.aspx stackoverflow.com/questions/2288575/…
Bittercoder


7

Ce:

Console.WriteLine( "StartingMonthColumn is {0}", ConfigurationManager.AppSettings["StartingMonthColumn"]);

fonctionne bien pour moi.

Notez que ConfigurationManagerc'est dans l' System.Configurationespace de noms (vous voudrez donc probablement une using System.Configuration;instruction), et que puisque ce que vous lisez a un type de chaîne, vous devrez analyser ce que vous avez lu pour l'utiliser comme un nombre.

Assurez-vous également de définir system.configuration.dllcomme référence dans votre projet ou script de génération.


quelle est la référence à ajouter pour obtenir ConfigurationManager.Appsettings j'utilise .Net 2.0 Framework
Sathish

1
Vous avez besoin d'une référence à System.Configuration.dll. La ConfigurationManagerclasse a été ajoutée dans .NET 2.0, donc vous devriez être OK.
Michael Burr

7

La raison est simple, votre appel à ConfigurationSettings.AppSettingsne renvoie pas le fichier de configuration requis. Veuillez essayer l'une des méthodes suivantes:

  • Assurez-vous que la configuration de votre application porte le même nom que le fichier exe de votre application - avec l'extension .config ajoutée, par exemple MyApp.exe.config
  • OU vous pouvez utiliser ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

J'espère que cela t'aides


3

Essayez de reconstruire votre projet - Il copie le contenu de App.configdans "<YourProjectName.exe> ​​.config" dans la bibliothèque de construction.


2

Ajoutez également la clé «StartingMonthColumn» dans App.config à partir de laquelle vous exécutez l'application, par exemple dans App.config du projet de test.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.