【问题标题】:Read Properties.Settings.Default from a different project从不同的项目中读取 Properties.Settings.Default
【发布时间】:2015-06-28 16:07:36
【问题描述】:

在我的WPF MVVM 应用程序中,我将ModelViewViewModel 作为单独的项目。现在,在我的View 应用程序中,我在Settings.settings 文件中定义了用户设置,我可以通过以下方式访问它们:

Properties.Settings.Default.MySettingName

在我的 Tool.exe.xml 中,我可以确认设置存在:

<userSettings>
    <Tool.Properties.Settings>
        <setting name="MySettingName" serializeAs="String">
            <value>False</value>
        </setting>
    </Tool.Properties.Settings>
</userSettings>

现在的问题是如何从我的 ViewModel 项目中访问这些设置? 很明显,如果我要做Properties.Settings.Default.*,它将指向它自己的设置。

到目前为止,我尝试了以下两种方式:

Configuration configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
KeyValueConfigurationCollection settings = configFile.AppSettings.Settings;

var keys = ConfigurationManager.AppSettings.AllKeys;

但是它们都总是返回 0 个实体。

我也知道我可以创建一个ViewModel 并从视图绑定设置,但对于这种特殊情况,创建一个新的ViewModel 只是为了访问设置听起来有点矫枉过正。

感谢您的帮助!

【问题讨论】:

  • 如果您使用的是 Visual Studio,您可以将设置类的访问修饰符更改为公共。双击 Settings.settings 文件,顶部有一个下拉菜单。然后,您可以使用完整的命名空间访问设置
  • 更好的方法是提供使用SettingsBase包装设置的服务
  • 你能提供更多关于服务的细节吗?

标签: c# .net wpf configuration settings


【解决方案1】:

感谢https://stackoverflow.com/a/632161/1729349

以下是我访问设置值的方法:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

// find section
ClientSettingsSection configSection = config.SectionGroups[@"userSettings"].Sections["Tool.Properties.Settings"] as ClientSettingsSection;

var setting = configSection.Settings.Get("MySettingName").Value.ValueXml.InnerText;

【讨论】:

  • 看起来不错,但我仍然只获得默认值而不是配置文件中的值:-(
  • NVM .. 我只是愚蠢。如果构建另一个链接项目,Visual Studio 每次构建时都会覆盖配置文件。
【解决方案2】:

AppSettings 用于“默认”appSettings 配置部分。您需要打开自己的配置部分。试试这个:

ConfigurationManager.GetSection("userSettings");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多