Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读/写和访问设置的最佳实践(不使用windows设置)_C#_Xml - Fatal编程技术网

C# 读/写和访问设置的最佳实践(不使用windows设置)

C# 读/写和访问设置的最佳实践(不使用windows设置),c#,xml,C#,Xml,首先要说的是,我不能使用内置的Properties.Settings,因为这些设置存储在一个XML文件中,由几个人使用(不是同时使用,而是通过版本控制) 我正在开发一个代码生成工具,它允许用户指定所有生成文件的输出位置,以及其他特定于项目的设置 目前,在应用程序中,我有一个名为ProjectSettings的静态类,该类使用in程序为每个设置提供一个公共静态参数: public static string Settings_ScreenDefinitions_C; public static s

首先要说的是,我不能使用内置的Properties.Settings,因为这些设置存储在一个XML文件中,由几个人使用(不是同时使用,而是通过版本控制)

我正在开发一个代码生成工具,它允许用户指定所有生成文件的输出位置,以及其他特定于项目的设置

目前,在应用程序中,我有一个名为ProjectSettings的静态类,该类使用in程序为每个设置提供一个公共静态参数:

public static string Settings_ScreenDefinitions_C;
public static string Settings_ScreenDefinitions_H;
// Etc currently there are about 20 of these.
有没有更好的方法来存储和访问这些项目

其次,这些设置通过对上述ProjectSettings类中的每个设置的读/写调用存储在XML中:

xmlWriter.WriteElementString("ScreenDefinitionsFileC", ProjectSettings.Settings_ScreenDefinitions_C);
xmlWriter.WriteElementString("ScreenDefinitionsFileH", ProjectSettings.Settings_ScreenDefinitions_H);
// Again there is around 20 of these, one for each property and the same for reading them back out.
当我添加更多属性时,我不禁感到必须有一种更优雅的方法来构造类(可能是字典?),还有一种更好的方法在XML中使用它来保存和读取

任何建议/建议都很好。


我不知道配置的完整列表,但我希望大多数配置可以通过在ConfigurationManager中添加不同的配置来控制,也就是说,如果您添加“MyConfiguration”,您可以在以后打开项目设置(特别是预构建和后构建事件),并且其中的配置都只用于“MyConfiguration”因此,在不同的配置之间切换只是通过选择不同的配置。

下面是我如何使用枚举和字典来实现的。我使用控制台输出演示了如何编写字典的键和值

using System;
using System.Collections.Generic;

namespace ConsoleApplication
{
    class Program
    {
        private enum Settings
        {
            ScreenDefinitionsFileC,
            ScreenDefinitionsFileH
        };

        static void Main(string[] args)
        {
            var settings= new Dictionary<Settings, string>()
            {
                {Settings.ScreenDefinitionsFileC, "Setting 1"},
                {Settings.ScreenDefinitionsFileH, "Setting 2"}
            };


            foreach (var setting in settings)
            {
                Console.WriteLine("{0} {1}", setting.Key, setting.Value);
            }

            Console.ReadKey(true);
        }
    }
}
使用系统;
使用System.Collections.Generic;
命名空间控制台应用程序
{
班级计划
{
私有枚举设置
{
屏幕定义文件,
屏幕定义文件
};
静态void Main(字符串[]参数)
{
var settings=newdictionary()
{
{Settings.ScreenDefinitionsFileC,“设置1”},
{Settings.ScreenDefinitionsFileH,“设置2”}
};
foreach(设置中的变量设置)
{
Console.WriteLine(“{0}{1}”,setting.Key,setting.Value);
}
Console.ReadKey(true);
}
}
}

通过这种方式,您可以在写入XML时枚举设置,但也可以在程序的生命周期中查找特定设置。

根据您的选择,您可以使用应用程序设置
属性。设置
、一个
ini
文件、XML文件或序列化对象。我想您误解了我的问题。。。或者它写得很糟糕:这看起来更整洁,更容易扩展。我可能会更新我的应用程序以使用类似的东西。非常感谢。没问题@TheGrovesy很高兴它能有用:-)