如何在WPF应用程序中使用App.config文件?

78

我在我的WPF应用程序中创建了一个App.config文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appsettings>
    <add key="xmlDataDirectory" value="c:\testdata"/>
  </appsettings>
</configuration>

然后我尝试使用以下代码读取值:

string xmlDataDirectory = ConfigurationSettings.AppSettings.Get("xmlDataDirectory");

但是它说这个方法已经过时了,应该使用ConfigurationManager,但我在类视图中搜索不到。

有人知道如何在WPF中使用配置文件吗?


有没有一种简单的方法可以从appsettings.json文件中获取设置,而不必新建IConfiguration?因为启动页面已经为我们做了这个,也许可以注入到MainWindow代码后面? - Rod
9个回答

81

您需要引用在GAC中的System.Configuration程序集。

ConfigurationManager的使用不仅限于WPF:它是访问任何类型应用程序的配置信息的特权方式。

更多信息请参见Microsoft Docs - ConfigurationManager


9
是的,就是这样,我不得不将名称从appsettings更改为appSettings,将System.Configuration引用添加到我的项目中,然后使用以下代码:string xmlDataDirectory = ConfigurationManager.AppSettings.Get("xmlDataDirectory"); - Edward Tanguay

35
在我的情况下,我按照以下步骤进行。
应用程序配置文件。
<configuration>  
   <startup> 
       <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>

 <appSettings>
   <add key="POCPublishSubscribeQueueName" value="FormatName:Direct=OS:localhost\Private$\POCPublishSubscribe"/>
 </appSettings>

</configuration>

我在项目中添加了System.Configuration

在文件开头添加了using System.Configuration的语句。

然后使用了这个语句:

string queuePath = ConfigurationManager.AppSettings["POCPublishSubscribeQueueName"].ToString();

18

在你的 app.config 文件中,将你的 appsetting 更改为:

<applicationSettings>
    <WpfApplication1.Properties.Settings>
        <setting name="appsetting" serializeAs="String">
            <value>c:\testdata.xml</value>
        </setting>
    </WpfApplication1.Properties.Settings>
</applicationSettings>

然后,在代码后台:

string xmlDataDirectory = WpfApplication1.Properties.Settings.Default.appsetting.ToString()

7

您需要通过资源管理器引用 System.Configuration(不仅仅是添加 using System.Configuration)。然后您可以编写:

string xmlDataDirectory = 
    System.Configuration.ConfigurationManager.AppSettings.Get("xmlDataDirectory");

已在VS2010中进行测试(感谢www.developpez.net)。 希望这可以帮到您。


是的,右键单击“引用”并从“引用管理器”中添加System.Configuration。谢谢! - midoriha_senpai

6

您需要在解决方案中添加对 System.configuration 的引用。同时,包含 using System.Configuration;。这样做后,您将可以访问所有配置设置。


3

Microsoft有一篇关于应用程序设置的好文章。 根据这篇文章,你需要:

  • 手动创建App.config文件(从项目上下文菜单中 -> 添加 -> 新项目... -> 应用程序配置文件)。 Dialog window for adding application config file
  • 在其中添加所需部分(我仅使用应用程序范围设置):
<?xml version="1.0" encoding="utf-8"?>

<configuration>
    <configSections>
        <sectionGroup name="applicationSettings"
                      type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <section name="DevelopmentEnvironmentManager.WPF.Properties.Settings"
                     type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        </sectionGroup>
    </configSections>
    <applicationSettings>
        <DevelopmentEnvironmentManager.WPF.Properties.Settings>
            <setting name="SqliteDbFilePath" serializeAs="String">
                <value>Database.db</value>
            </setting>
            <setting name="BackgroundColor" serializeAs="String">
                <value>White</value>
            </setting>
            <setting name="TextColor" serializeAs="String">
                <value>Black</value>
            </setting>
        </DevelopmentEnvironmentManager.WPF.Properties.Settings>
    </applicationSettings>
</configuration>

注意: 将 'DevelopmentEnvironmentManager.WPF' 替换为您的应用程序名称。

此外,您可以进入项目属性并添加 Settings.Designer: 项目设置 这将向您的项目添加方便的设计程序,因此您不必手动编辑XML: 解决方案资源管理器中的文件位置 活动中的设置设计器

要从代码中访问设置 - 只需保存并关闭所有配置编辑器,构建应用程序并访问静态 Propeties(同样,请勿忘记更改命名空间中的应用程序名称):

string databasePath = DevelopmentEnvironmentManager.WPF.Properties.Settings.Default.SqliteDbFilePath;

Accessing settings from code


2

这也可以工作

WpfApplication1.Properties.Settings.Default["appsetting"].ToString()

2

您可以通过app.config文件的属性将配置文件模式更改回DotNetConfig.xsd。要查找所需模式的目标,请按名称搜索或创建WinForms应用程序,将配置文件添加到项目中,并在其属性中找到完整路径。


-2

我有一个类库 WPF 项目,我使用:

'Read Settings
Dim value as string = My.Settings.my_key
value = "new value"

'Write Settings
My.Settings.my_key = value
My.Settings.Save()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接