【问题标题】:I need my C# settings file to be static (as in one place)我需要我的 C# 设置文件是静态的(就像在一个地方一样)
【发布时间】:2011-07-28 22:37:59
【问题描述】:

目前我有默认的Settings.settings 文件,可以通过Properties.Settings.Default 访问。

但是这个配置保存在我用户的appdata 文件夹中。我怎样才能让只有一个配置文件与通用的 exe 保存在同一目录中,并且可以在运行时更改?

【问题讨论】:

  • 您是因为一个可移植的应用程序而希望这样做,还是只是想阻止每个用户对可执行文件进行自己的设置?
  • 好吧,我遇到的问题就是这个。我的应用程序是一个组合控制台和表单应用程序 - 该应用程序在控制台中运行(gui 用于设置参数),并由另一个应用程序调用/运行。由于它由包装应用程序调用,因此它不知道使用我的用户设置并最终使用默认值。所以我猜下一个?我可以告诉应用程序在代码中哪里可以找到我的用户配置吗?
  • 更新:根据程序集是否为强名称,用于用户设置的路径似乎是动态的。我需要进一步调查。
  • 请记住,您不能指望用户有权修改与 exe 位于同一目录中的文件,特别是如果该目录位于 Program Files 下。

标签: c# configuration settings


【解决方案1】:

正如documenation 所说,您无法使用 Properties.Settings 功能执行此操作:

应用范围设置是只读的,只能在 设计时或通过更改 .exe.config 文件 应用程序会话之间。但是,用户范围设置可以是 在运行时编写,就像更改任何属性值一样。这 新值在应用程序会话期间持续存在。你 可以通过以下方式在应用程序会话之间持久更改用户设置 调用 Settings.Save 方法。这些设置保存在 用户配置文件。

另一种方法是使用 System.IO API 来读取和写入您自己设计的配置文件。

【讨论】:

  • 一方面,我始终使用Dictionary<string,object> 进行设置。它是可序列化的,效果很好!
  • @Vercas 字典不可序列化...至少不能使用 XmlSerializer。我最近一直在使用自定义的可序列化字典类进行设置。
  • @NickAldwin 如果您不想让普通用户弄乱设置文件,请使用 BinaryFormatter...
  • @Vercas 我们之前已经为此烦恼(版本不兼容导致文件变得不可读),我们发现在许多支持案例中能够手动快速编辑文件很有帮助(两者都是为用户和我们)。
【解决方案2】:

Vista/7 上的 UAC 会出现问题。
请务必将重要的应用程序数据文件(例如“设置”)保存在隐藏且可访问的目录 - AppData。
UAC 允许访问此目录及其子目录。

如果你想在所有用户之间共享文件,你可能想使用“CommonAppData”目录,但你需要管理员权限才能在那里写。

【讨论】:

    【解决方案3】:

    您可以将设置放在应用程序配置文件中的<applicationSettings> 标记中。

    有关标签的文档,请参阅 http://msdn.microsoft.com/en-us/library/ms229207.aspx

    例如(xxxxx -> Visual Studio 项目名称,yyyyy-> 设置文件中的实际设置)。

      <applicationSettings>
        <xxxxxx.Properties.Settings>
          <setting name="yyyyyy"
            serializeAs="String">
            <value>some_value</value>
          </setting>
        </ReprintProcess.Properties.Settings>
      </applicationSettings>
    

    【讨论】:

      【解决方案4】:

      如果不扩展和大量修改 Properties.Settings 类,您将无法实现它。 因此,我建议您编写自己的设置管理包装器或替代库,例如 Settings4Net

      【讨论】:

        猜你喜欢
        • 2011-05-15
        • 2012-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-22
        • 1970-01-01
        • 2012-08-04
        相关资源
        最近更新 更多