2010-07-09 39 views
3

我想存储C#应用程序的设置,这样默认的设置可以很容易地与我的二进制文件一起提供,最终用户可以使用简单的文本编辑器(或以其他一些简单的方式)更改它们。
我似乎面临几个选择:.config文件,.settings文件或.resx文件。这些有什么优点和缺点?如何存储可部署c#应用程序的设置?

编辑1:最终用户主要是计算机专业人员,因此编辑这些文件应该不是什么大问题。

编辑2:设置类似于连接字符串和其他一些参数(大部分是一次性的东西)。建立一些GUI/API来改变它们并不是真正的选择。此外,我的应用程序不会编辑这些值中的任何一个,因此不需要通过代码实现持久性。

回答

4

是的,项目+属性,设置选项卡旨在执行此操作。在此处添加您的设置,将范围更改为应用程序。这会在您的构建方向中生成一个app.exe.config文件,并将其与您的EXE一起部署。使用Properties.Settings.Default。 设置名称在您的代码中获取设置值。您的用户通常需要管理员权限才能编辑目标机器上的.exe.config文件以更改设置值。

小字体:设置对于DLL程序集不适用,您必须手工合并.config文件。使用调试器时,将从app.vshost.exe.config文件中检索设置。

.settings文件是IDE使用的帮助文件,忽略它。 .Resx文件存储资源,它们被编译并以二进制形式嵌入程序集中。它们不能被用户编辑。

0

如果最终用户真的要编辑他们,我不确定我会希望他们编辑我的app.config文件。

你有另外几个替代品,你没有包括在内。你可以使用一个老派的.INI文件,这对最终用户来说是很简单的。你也可以使用注册表。我会推荐INI文件,除非你的用户非常精明,在这种情况下使用.config文件。

1

我认为你可以有两种方法来做到这一点。

  • 对于普通用户,您可以制作一个自定义的图形用户界面,以方便他们使用。
  • 对于高级用户,如果存储在文本文件(ini文件,配置文件等)中,或者您可以创建API,则可以使用文本编辑器编辑配置。
1

.settings文件通常用于特定用户的偏好和配置信息(而的.config文件用于该修改的.Net应用程序运行时或任何全局设置。干脆把.config文件中的参数可以改变应用程序的行为,即使没有为它编写单行代码也是如此)。

退房MSDN上的设置文章更多:http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx

+0

你能解释.config文件如何改变我的应用程序的行为吗? – apoorv020 2010-07-09 13:36:47

+0

有几种方法,并且大多数.Net组件都有自己的部分,它们依赖于_.config_文件,但是我可以从头顶开始思考一些示例:对于WCF,可以修改连接超时,安全性和加密级别等等,就在_.config_文件中。您还可以用本地DLL替换GAC DLL,或者在_.config_文件中指定将覆盖运行时将加载的版本和位特性。 – rakuo15 2010-07-09 13:54:06

+0

Hans说您可能需要在计算机上进行管理员访问才能更改.ex.config文件,这正是我需要的,应该照顾大多数恶意用户。但值得一提的是,它可能是一个非常危险的工具提供给普通用户。 – apoorv020 2010-07-09 14:02:54

0

的答案取决于部署方法。例如,如果您使用ClickOnce并提供更新,则可能会使用Application Settings来解决问题。

我相信最好的方法是创建一个GUI,这当然是适合新手用户的。鉴于您已经排除了该选项,请使用John的建议(ini文件)。

1

由于该文件将被用户修改,我认为使用app.config不是一个好主意。如果他们打破文件结构呢?或者设置一个无效值?应用程序可能会直接崩溃。

其中一个解决方案是使用定制XML文件。您将在应用程序启动时验证它。 XSD可能是更优雅的方法,但您也可以直接解析它并在代码中进行验证。如果文件无效而不是崩溃,则会尝试解决问题,如果不可能,则向用户显示相当的错误,并解释在第处的XML中存在错误,位置n,其中是[error description here]