从app.config文件中读取

Sat*_*ish 130 c#

我试图使用代码从下面的app.config文件中读取StartingMonthColumn和CategoryHeadingColumn

ConfigurationSettings.AppSettings["StartingMonthColumn"]
Run Code Online (Sandbox Code Playgroud)

但它返回null,ConfigurationSettings.AppSettings.Count也返回零

请帮我在我的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>
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 170

配置设置 .AppSettings过时,您应该使用Configuration Manager .AppSettings(您需要添加对System.Configuration的引用)

int value = Int32.Parse(ConfigurationManager.AppSettings["StartingMonthColumn"]);
Run Code Online (Sandbox Code Playgroud)

如果您仍然无法在应用设置中阅读,请检查您的app.config文件是否正确命名.具体来说,它应该根据执行程序集命名,即MyApp.exe.config,应该驻留在同一目录中MyApp.exe.

  • 如果ConfigurationSettings.AppSettings ["StartingMonthColumn"]返回null或空字符串,我会怀疑Int32.Parse会在尝试解析该值时抛出异常. (2认同)
  • 请注意,您还可以通过Settings.Default.*访问值的强类型版本(即,在这种情况下,它将是Settings.Default.StartingMonthColumn). (2认同)

Yar*_*Yar 20

仅供将来参考,您只需要添加System.Configuration到您的参考库:

在此输入图像描述

  • 您的答案比这里的第一个答案要好,每个人都忘记说您必须添加参考 (2认同)

Bit*_*der 18

不推荐使用 ConfigurationSettings.AppSettings ,请参见此处:

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

那说,它应该仍然有效.

只是一个建议,但您确认您的应用程序配置是您的可执行文件正在使用的配置吗?

尝试附加调试器并检查以下值:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
Run Code Online (Sandbox Code Playgroud)

然后打开配置文件并验证该部分是否符合您的预期.


小智 17

尝试:

string value = ConfigurationManager.AppSettings[key];
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请检查: 从App.Config中读取密钥


Mic*_*urr 7

这个:

Console.WriteLine( "StartingMonthColumn is {0}", ConfigurationManager.AppSettings["StartingMonthColumn"]);
Run Code Online (Sandbox Code Playgroud)

对我来说很好.

请注意,ConfigurationManager它位于System.Configuration命名空间中(因此您可能需要一个using System.Configuration;语句),并且由于您读入的内容具有字符串类型,因此您需要解析您读入的内容以将其用作数字.

此外,请确保system.configuration.dll在项目或构建脚本中设置为引用.


mug*_*vid 7

原因很简单,您的调用ConfigurationSettings.AppSettings不会返回所需的配置文件.请尝试以下任何一种方式:

  • 确保您的应用程序配置与应用程序的exe文件具有相同的名称 - 附加扩展名.config,例如MyApp.exe.config
  • 或者你可以使用 ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

希望这可以帮助