2009-11-20 24 views
14

我运行.NET 3.5的C#新手,我想存储一堆的App.config应用程序的默认值,因为这些设置可以由服务器环境而异(如开发,分期,生产)。我想要做的与this StackOverflow article中描述的类似,但我也希望能够使用非字符串值(例如int,bool)。像这样的东西(名称值只是一个例子,顺便说一句):使用App.config中设置强类型的变量

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <applicationSettings> 
     <MyApp> 
      <setting name="InitText" serializeAs="String"> 
       <value>Hello</value> 
      </setting> 
      <setting name="StartAt" serializeAs="Integer"> 
       <value>5</value> 
      </setting> 
      <setting name="IsWeekend" serializeAs="Boolean"> 
       <value>True</value> 
      </setting> 
     </MyApp> 
    </applicationSettings> 
</configuration> 

可能有人提供了如何做到这一点的例子,以及如何检索通过C#中的值?我见过很多需要使用的示例,但我不确定是否需要这些元素,如果有,请如何创建它们。

回答

28

怎么样使用.NET Framework的Application Settings architecture。您可以强制键入对默认值的访问权限。

在Windows应用程序项目上,Settings文件是在Resources文件夹中自动创建的。然后,您可以添加在App.config文件中保存的应用程序设置,就像您在问题中显示的一样。

例如:

int i = Settings.Default.IntSetting; 

bool b = Settings.Default.BoolSetting; 

编辑: 如果您的项目不包含的设置文件,你可以随时加入新的项目,然后选择一个设置文件添加一个。 (右键单击项目文件,然后执行:添加 - >新建项目 - >设置文件)。在我的情况下,我将其命名为“设置”,但您可以随便命名。

添加文件Visual Studio将打开设置设计师,您可以添加您的强类型设置后。从你说的话你应该设置在应用程序范围而不是在用户。然后建立这个项目,你应该可以访问带有文件名称的类。

+0

我认为这是我需要的,但我无法通过C#访问变量。当我输入“设置”。 Intellisense没有看到任何东西...... – 2009-11-20 18:35:51

+1

它并没有真正融入到框架中,而是一个IDE的东西。当您向您的C#/ VB项目中添加一个'.settings'文件时,它将用于生成类'Settings'的代码,该代码将配置设置作为相应类型的属性进行封装,并执行所有必要的强制类型转换等。 – 2009-11-20 20:59:40

+0

Thank you for the澄清 - 我很感激。 – 2009-11-26 04:20:04

11
Boolean isWeekend = Convert.ToBoolean(ConfigurationManager.AppSettings["IsWeekend"]) 
+6

或者Boolean.TryParse(...)。 http://msdn.microsoft.com/en-us/library/system.boolean.tryparse.aspx – 2009-11-20 17:54:41

+8

这不会失败的要求“强类型变量”部分,你仍然存储在应用程序中的字符串.config – 2009-11-20 18:13:03

+0

是的,我不想重写一个字符串作为正确的类型。 – 2009-11-20 18:24:10

-1

听起来像是你想有一个自定义<configSection>。基本上,它的工作原理是这样的:

- 创建具有正确的默认值,等等,所以它会自动加载基于你的web.config设置来设置一个很好的继承结构的配置类。 - 添加你的配置节在web.config,指定“类型”,将加载您的设置,以便在.NET框架将知道如何初始化

您可以找到MSDN library关于它的各种信息的。这些示例是asp.net,但它们也可以在应用程序配置中正常工作。

+0

你不需要为此写一个自定义的configSection。 – BrainSlugs83 2013-09-12 06:31:22