gpt4 book ai didi

.net - 如何从加载的 App.config 文件中检索 ApplicationSettings?

转载 作者:行者123 更新时间:2023-12-02 05:14:29 26 4
gpt4 key购买 nike

是否可以访问 applicationSettings 中的值?部分加载 app.config 文件?

我找到了一个例子 How do I retrieve appSettings ,但我不知道如何访问 applicationSettings这边走。

最佳答案

applicationSettings 在运行时是只读的。您可以通过 app.config 文件中的文本编辑器直接设置/修改它们,但建议在 Visual Studio 中打开项目属性并选择“设置”选项卡。设置正确的范围很重要:

  • 如果设置适用于整个应用程序(适用于所有用户),请选择“应用程序”作为范围。
  • 如果每个用户都应该有单独的设置(绑定(bind)到用户配置文件),然后选择“用户”

  • 例如,如果您创建 myOwnSetting 在您的项目中 WindowsFormsTestApplication1 如下(将范围更改为 "Application" ):

    myOwnSetting

    它会将以下内容添加到应用程序的 app.config 文件中:
    <configuration>
    <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <section name="WindowsFormsTestApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
    </configSections>
    <applicationSettings>
    <WindowsFormsTestApplication1.Properties.Settings>
    <setting name="myOwnSetting" serializeAs="String">
    <value>Hi there!</value>
    </setting>
    </WindowsFormsTestApplication1.Properties.Settings>
    </applicationSettings>
    </configuration>

    Visual Studio 创建 C# 代码以自动访问此设置(这就是为什么您应该在项目属性中而不是通过文本编辑器执行此操作) - 保存更改后,在同一命名空间中,您可以轻松地在应用程序中读取其值通过以下代码:
    var currentValue = Properties.Settings.Default.myOwnSetting;

    鉴于 applicationSettings在上面的 list 中,这将检索字符串“Hi there!”对于变量 currentValue .

    备注 如果您创建了 myOwnSetting “用户”范围 ,然后将其存储在名为 <userSettings> 的部分中而不是 <applicationSettings> ,但您仍然可以使用上面的代码行访问它。

    的另一个区别范围“用户”设置是您具有读写访问权限,即允许执行以下操作:
            Properties.Settings.Default.myUserSetting = "Something else";
    Properties.Settings.Default.Save();

    如果您对“应用程序”范围设置 myOwnSetting 进行相同尝试,则会导致编译时错误,告诉您它是只读的。

    如果您重新启动应用程序,您会注意到 myUserSetting 已更改为值“其他” - 但旧值仍在 app.config 中。为什么会这样?原因是它被视为默认值 - 正如我之前所说,“用户”范围绑定(bind)到用户配置文件。因此,值“其他东西”存储在
    C:\Documents and Settings\USERID\Local Settings\Application Data\FIRMNAME\WindowsFormsTestApplicati_Url_tdq2oylz33rzq00sxhvxucu5edw2oghw\1.0.0.0

    在名为 User.config 的文件中, 如下所示:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <userSettings>
    <WindowsFormsTestApplication1.Properties.Settings>
    <setting name="myUserSetting" serializeAs="String">
    <value>Something else</value>
    </setting>
    </WindowsFormsTestApplication1.Properties.Settings>
    </userSettings>
    </configuration>

    您无法准确说出路径,因为它是由 .NET Framework 自动创建的,并且在您的 PC 上看起来会有所不同。但是可以看到USERID是你当前用户的Windows用户ID,FIRMNAME是你指定的程序集信息的一部分,路径中也使用了程序集名称和版本。

    注:
  • <sectionGroup><section>声明是强制性的,其名称属性需要与命名空间匹配。命名空间必须在配置中只出现一次,而且只有一个 applicationSettings部分允许。
  • 正如您在配置文件中看到的,命名空间在那里被明确提及( WindowsFormsTestApplication1.Properties.Settings )。因此,如果您想从不在同一命名空间中的代码访问设置,您可能需要使用完全限定的引用。话虽如此,复制整个<applicationSettings>...</applicationSettings>时要小心。部分从一个应用程序的配置到另一个 - 之后您可能需要更改目标配置中的命名空间。
  • 如果您使用的是设置设计器(项目中的设置选项卡),它将创建一个名为 的文件。 Settings.Settings (与 Settings.Designer.cs 一起通过 C# 代码访问 sessing)在项目的 Properties 部分。这是设置的副本,因为它将存储在您的 Web.config 中。或 App.config文件(取决于您的项目类型,仅适用于应用程序范围设置 - 用户范围设置基于用户配置文件存储)。您可以创建其他 *.settings文件并使用它们(如 here 所述)。
  • 如果您是 不是 使用设置设计器,或者如果您使用类似 LinqPad 的工具,您可能需要使用不同的方法。考虑一下:
    internal static string GetApplicationSetting(string key, 
    string nameSpace="Properties.Settings")
    {
    string xValue=null;
    try
    {
    string path = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
    XDocument doc = XDocument.Load(path);
    var xPathStr= string.IsNullOrEmpty(nameSpace)
    ? "//applicationSettings"
    : $"//applicationSettings/{nameSpace}";
    var settings=doc.XPathSelectElement(xPathStr).Elements().Where(
    w => w.Name=="setting"
    && w.HasAttributes
    && w.Attribute("serializeAs").Value=="String"
    );
    var setting=settings.Where(f => f.HasAttributes
    && f.Attribute("name").Value==key).Elements();
    xValue=setting.FirstOrDefault().Value;
    }
    catch {}
    return xValue;
    }

    您可以读取字符串类型 applicationSettings通过将配置视为 XDocument .给出的示例仅限于字符串类型,您可以从上面的 app.config 示例中检索设置,如下所示:var value=GetApplicationSetting("myOwnSetting", "WindowsFormsTestApplication1.Properties.Settings");同样,您可以创建一个类似的函数 获取用户设置 默认 <userSettings>部分:只需复制上面的代码,重命名函数名并替换applicationSettingsxPathStr来自 userSettings .
  • 用户设置有升级方法,描述为here .有关用户设置存储位置的更多详细信息,请访问 there .
  • <appSettings>配置中的部分工作方式不同,因为它不区分“用户”和“应用程序”范围,也不支持不同的数据类型,只支持字符串。但是,可以轻松读取和写入配置键/值。
    如果您对代码感兴趣,可以在此处(在 stackoverflow 上)找到它:
    how to read/write config settings of appSettings
  • 如果您不确定是否应该使用 AppSettingsapplicationSettings ,然后 read this 在你决定之前。
  • 关于.net - 如何从加载的 App.config 文件中检索 ApplicationSettings?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2101273/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com