千家信息网

如何进行.net Framework配置文件操作

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这期内容当中小编将会给大家带来有关如何进行.net Framework配置文件操作,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。.NET Framework的应用可
千家信息网最后更新 2025年01月19日如何进行.net Framework配置文件操作

这期内容当中小编将会给大家带来有关如何进行.net Framework配置文件操作,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

.NET Framework的应用可以帮助开发人员创建一个支持WEB应用程序部署的平台。方便编程人员进行代码编写。我们将会在文章中为大家详细介绍有关.NET Framework配置文件的操作方法,希望对大家有所帮助。

.NET Framework配置文件1. 创建配置节类

必须创建继承自ConfigurationSection的对象才能进行配置数据读写操作,ConfigurationSection提供了索引器用来获取和设置配置数据,需要注意的是拥有ConfigurationProperty 特性的属性才会被存储,并且名称要保持大小写完全一致,如下面的代码中,所有的"id"必须保持一样。

  1. class ConfigSectionData :
    ConfigurationSection

  2. {

  3. [ConfigurationProperty("id")]

  4. public int Id

  5. {

  6. get { return (int)this["id"];

  7. }

  8. set { this["id"] = value;

  9. }

  10. }

  11. [ConfigurationProperty("time")]

  12. public DateTime Time

  13. {

  14. get

  15. {

  16. return (DateTime)this["time"];

  17. }

  18. set { this["time"] = value;

  19. }

  20. }

  21. }

.NET Framework配置文件2. 创建配置文件操作对象

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

  2. ConfigSectionData data =
    new ConfigSectionData();

  3. data.Id = 1000; data.Time =
    DateTime.Now;

  4. config.Sections.Add("add", data);

  5. config.Save(Configuration
    SaveMode.Minimal);

上面的例子是操作 app.config,在根节点(configuration)下写入名称为"add"的配置数据。

需要注意的 VS2005 在IDE模式下会将信息写入 *.vshost.exe.config,并且在程序关闭时覆写该文件,因此您可能看不到您写入的配置数据,只要在资源管理其中执行 *.exe 文件,您就可以在 *.exe.config 文件中看到结果了。

如果我们需要操作非缺省配置文件,可以使用ExeConfigurationFileMap对象。

  1. ExeConfigurationFileMap

  2. file = new ExeConfigurationFileMap();

  3. file.ExeConfigFilename = "test.config";

  4. Configuration config = ConfigurationManager.
    OpenMappedExeConfiguration(file,
    ConfigurationUserLevel.None);

  5. ConfigSectionData data =
    new ConfigSectionData();

  6. data.Id = 1000; data.Time = DateTime.Now;

  7. config.Sections.Add("add", data);

  8. config.Save(ConfigurationSaveMode.Minimal);

如果我们不希望在根节点下写入配置数据,可以使用ConfigurationSectionGroup对象。

  1. ExeConfigurationFileMap

  2. file = new ExeConfigurationFileMap();

  3. file.ExeConfigFilename = "test.config";

  4. Configuration config = ConfigurationManager.
    OpenMappedExeConfiguration(file,
    ConfigurationUserLevel.None);

  5. ConfigSectionData data =
    new ConfigSectionData(); data.Id = 1000;

  6. data.Time = DateTime.Now;

  7. config.SectionGroups.Add("group1",
    new ConfigurationSectionGroup());

  8. config.SectionGroups["group1"].
    Sections.Add("add", data);

  9. config.Save(ConfigurationSaveMode.Minimal);

下面就是生成的配置文件。

.NET Framework配置文件3. 读取配置文件

  1. ExeConfigurationFileMap

  2. file = new ExeConfigurationFileMap();

  3. file.ExeConfigFilename = "test.config";

  4. Configuration config =ConfigurationManager.
    OpenMappedExeConfiguration(file,
    ConfigurationUserLevel.None);

  5. ConfigSectionData data = config.
    SectionGroups["group1"].
    Sections["add"] as ConfigSectionData;

  6. //ConfigSectionData data =
    config.Sections["add"] as
    ConfigSectionData;

  7. // 从根节读取

  8. if (data != null)

  9. {

  10. Console.WriteLine(data.Id);

  11. Console.WriteLine(data.Time);

  12. }

.NET Framework配置文件4. 写配置文件

在写入 ConfigurationSectionGroup 和 ConfigurationSection 前要判断同名配置是否已经存在,否则会写入失败。
另外如果配置文件被其他Configuration对象修改,则保存会失败,并抛出异常。建议采用Singleton模式。

  1. ExeConfigurationFileMap file =
    new ExeConfigurationFileMap();

  2. file.ExeConfigFilename = "test.config";

  3. Configuration config = ConfigurationManager.
    OpenMappedExeConfiguration(file,
    ConfigurationUserLevel.None);

  4. ConfigSectionData data =
    new ConfigSectionData();

  5. data.Id = 2000; data.Time = DateTime.Now;

  6. ConfigurationSectionGroup group1 =
    config.SectionGroups["group1"];

  7. if (group1 == null) config.SectionGroups.
    Add("group1", new ConfigurationSectionGroup());

  8. ConfigurationSection data =
    group1.Sections["add"] as config;

  9. if (add == null) config.SectionGroups
    ["group1"].Sections.Add("add", data);

  10. else { group1.Sections.Remove("add");

  11. group1.Sections.Add("add", data);

  12. // 或者直接修改原配置对象,前提是类型转换要成功。

  13. //ConfigSectionData configData =
    add as ConfigSectionData;

  14. //configData.Id = data.Id;

  15. //configData.Time = data.Time;

  16. }

  17. config.Save(ConfigurationSaveMode.Minimal);

.NET Framework配置文件5. 删除配置节

删除ConfigurationSectionGroup

  1. config.SectionGroups.
    Remove("group1");

  2. //config.SectionGroups.Clear();

  3. config.Save(Configuration
    SaveMode.Minimal);

删除ConfigurationSection

  1. config.Sections.Remove("add1");

  2. //config.Sections.Clear();

  3. if (config.SectionGroups["group1"]
    != null)

  4. {

  5. config.SectionGroups["group1"].
    Sections.Remove("add2");

  6. //config.SectionGroups["group1"].
    Sections.Clear();

  7. }

  8. config.Save(Configuration
    SaveMode.Minimal);

.NET Framework配置文件6. 其他

可以使用 ConfigurationManager.OpenMachineConfiguration() 来操作 Machine.config 文件。 或者使用 System.Web.Configuration 名字空间中的 WebConfigurationManager 类来操作 ASP.net 配置文件。 ConfigurationManager还提供了AppSettings、ConnectionStrings、GetSection()等便捷操作。

.NET Framework配置文件7. 使用自定义类

比如ConfigSectionData里面,除了简单类型之外,可不可以有自定义的类。可以使用自定义类,不过需要定义一个转换器。

  1. using System;

  2. using System.Collections; using System.
    Collections.Generic;

  3. using System.Configuration; using
    System.Globalization;

  4. using System.ComponentModel;

  5. // 要写入配置文件的自定义类

  6. class CustomData

  7. {

  8. public CustomData(string s)

  9. {

  10. this.s = s;

  11. }

  12. private string s;

  13. public string S

  14. {

  15. get

  16. {

  17. return s;

  18. }

  19. set

  20. {

  21. s = value;

  22. }

  23. }

  24. }

  25. // 自定义的转换器(演示代码省略了类型判断)

  26. class CustomConvert : Configuration
    ConverterBase

  27. {

  28. public override bool CanConvertFrom
    (ITypeDescriptorContext ctx, Type type)

  29. {

  30. return (type == typeof(string));

  31. }

  32. public override object ConvertTo
    (ITypeDescriptorContext ctx,
    CultureInfo ci, object value, Type type)

  33. {

  34. return (value as CustomData).S;

  35. }

  36. public override object ConvertFrom
    (ITypeDescriptorContext ctx,
    CultureInfo ci, object data)

  37. {

  38. return new CustomData((string)data);;

  39. }

  40. }

  41. class ConfigSectionData :
    ConfigurationSection

  42. { [ConfigurationProperty("id")]

  43. public int Id

  44. {

  45. get

  46. {

  47. return (int)this["id"];

  48. }

  49. set

  50. {

  51. this["id"] = value;

  52. }

  53. }

  54. [ConfigurationProperty("time")]

  55. public DateTime Time { get

  56. {

  57. return (DateTime)this["time"];

  58. }

  59. set

  60. {

  61. this["time"] = value;

  62. }

  63. }

  64. [ConfigurationProperty("custom")]
    [TypeConverter(typeof(CustomConvert))]

  65. // 指定转换器 public CustomData Custom

  66. {

  67. get

  68. {

  69. return (CustomData)this["custom"];

  70. } set

  71. {

  72. this["custom"] = value;

  73. }

  74. }

  75. }

  76. public class Program

  77. {

  78. static void Main(string[] args)

  79. {

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

  81. ConfigSectionData data = new ConfigSectionData();

  82. data.Id = 1000;

  83. data.Time = DateTime.Now;

  84. data.Custom = new CustomData("abcdefg...");

  85. config.Sections.Add("add", data);

  86. config.Save(ConfigurationSaveMode.Minimal);

  87. // 读取测试

  88. ConfigSectionData configData =
    (ConfigSectionData)config.Sections["add"];

  89. bbs.bitsCN.com Console.WriteLine
    (configData.Custom.S);

  90. }

  91. }

上述就是小编为大家分享的如何进行.net Framework配置文件操作了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

0