2016-06-09 40 views
2

首先要说的是,我不能使用内置的Properties.Settings,因为这些设置存储在由多个人使用的XML文件中(不是在同一时间,而是通过版本控制)。阅读/写入和访问设置的最佳做法(不使用Windows设置)

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

目前,在应用程序我有一个静态类称为ProjectSettings这对于每个设置使用公共静态参数的程序:

public static string Settings_ScreenDefinitions_C; 
public static string Settings_ScreenDefinitions_H; 
// Etc currently there are about 20 of these. 

是否有存储和访问这些thoughout项目的更好的方法?

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. 

当我添加更多的属性我不禁觉得必须有:

其次,这些设置是使用一个读/写要求在上述ProjectSettings类每个设置存储在XML一个更优雅的构造类的方法(也许是一个字典?)以及在XML中用于保存和读取的更好方法?

任何建议/指针会很好。

+0

根据您的选择,您可以使用应用程序设置'Properties.Settings','ini'文件,xml文件或序列化对象。 – 2016-06-09 08:45:51

回答

1

下面是我将如何使用枚举和字典。我已经使用控制台输出来展示如何编写字典的键和值。

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); 
     } 
    } 
} 

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

+1

感谢这看起来更整齐,更容易扩展。我可能会更新我的应用程序来使用这样的东西。非常感谢。 – TheGrovesy

+0

没问题@TheGrovesy很高兴它可以使用:-) –

0

enter image description here

我不知道该配置的完整列表,但我希望他们大多可以通过configurationManger添加不同的配置来控制,即如果添加“MyConfiguration”你可以打开之后项目设置(特别是预构建和后构建事件),并且这些配置仅适用于“myConfiguration”,因此只能通过选择不同的配置来在不同配置之间切换。

+0

我想你已经误解了我的问题......或者它的写得不好:S – TheGrovesy