使用 App.config 设置强类型变量
Posted
技术标签:
【中文标题】使用 App.config 设置强类型变量【英文标题】:Using App.config to set strongly-typed variables 【发布时间】:2010-12-18 19:58:42 【问题描述】:我是运行 .NET 3.5 的 C# 新手,我想在 App.config 中存储一堆应用程序默认值,因为设置可能因服务器环境(例如开发、登台、生产)而异。我想做的与this *** article 中描述的类似,但我也希望能够使用非字符串值(例如 int、bool)。像这样的东西(名称值只是示例,顺便说一句):
<?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# 检索值吗?我见过很多需要使用 and 的例子,但我不确定我是否需要这些元素,如果需要,如何创建它们。
【问题讨论】:
【参考方案1】:Boolean isWeekend = Convert.ToBoolean(ConfigurationManager.AppSettings["IsWeekend"])
【讨论】:
或 Boolean.TryParse(...)。 msdn.microsoft.com/en-us/library/system.boolean.tryparse.aspx 这不符合要求的“强类型变量”部分,您仍然在 app.config 中存储一个字符串 是的,我不想将字符串重新转换为正确的类型。 我想在我的回答中补充一点,除了字符串之外,这真的不是强类型的,但是电话响了。您只需要对非字符串数据类型使用转换。尽管如此,我还是赞成 João Angelo 的回答,看起来它可能有点圆滑。 或 var isWeekend = Boolean.Parse(ConfigurationManager.AppSettings["IsWeekend"] ?? "false")【参考方案2】:如何使用 .NET Framework 的 Application Settings architecture。您可以对默认值进行强类型访问。
在 Windows 应用程序项目中,设置文件是在 Resources 文件夹中自动创建的。然后,您可以添加保留在 App.config 文件中的应用程序设置,就像您在问题中显示的那样。
例如:
int i = Settings.Default.IntSetting;
bool b = Settings.Default.BoolSetting;
编辑: 如果您的项目不包含设置文件,您始终可以通过添加一个新项目然后选择一个设置文件来添加一个。 (右键单击项目文件并执行:添加->新建项目->设置文件)。在我的例子中,我将其命名为设置,但您可以随意命名。
添加文件后,Visual Studio 将打开设置设计器,您可以在其中添加强类型设置。根据您所说,您应该在应用程序范围内而不是在用户范围内设置设置。然后构建项目,您应该可以访问具有文件名的类。
【讨论】:
我认为这是我需要的,但我无法通过 C# 访问变量。当我键入“设置”时。 Intellisense 什么也没看到... 它并没有真正融入框架,而是一个 IDE 的东西。当您将.settings
文件添加到您的 C#/VB 项目时,它用于为类 Settings
生成代码,该代码将配置设置包装为适当类型的属性,并执行所有必要的强制转换等。
感谢您的澄清——非常感谢。
这是一个很好的答案...但是它不会将设置外部化以供用户更改。如果您更改 .settings 文件中的值,则必须重新构建解决方案以获得新值!用户往往会对这样的事情感到生气。 :)
仅供参考,“Settings.Default...”的第一部分是指您的 .settings 文件的名称。我的被命名为 AppSettings.settings,所以我不得不使用“AppSettings.Default...”【参考方案3】:
JayG 建议的事情可以由 Visual Studio 自动完成。使用 appsettings 向导as described in the MSDN。此外,整个Application Settings 基础架构可能值得一读。
【讨论】:
【参考方案4】:听起来你想要一个自定义的<configSection>
。基本上,它是这样工作的:
-创建一个具有适当默认值等的配置类,并设置一个很好的继承结构,以便它会根据您的 web.config 设置自动加载。 - 将您的配置部分添加到 web.config,指定将加载您的设置的“类型”,以便 .NET 框架知道要初始化什么
您可以在MSDN library 上找到有关它的各种信息。这些示例是 asp.net,但它们也适用于应用程序配置。
【讨论】:
您不需要为此编写自定义 configSection。以上是关于使用 App.config 设置强类型变量的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PowerShell 读取/写入 App.config 设置?