配置文件作为嵌入式资源

7 .net configuration

有没有人在VB.NET或C#中使用嵌入式配置文件?我理解如何嵌入配置文件,但之后访问它的最佳方法是什么?我可以将它视为配置文件,就像我可以使用外部配置文件一样吗?

任何帮助是极大的赞赏.

zap*_*pan 7

我认为将配置文件作为嵌入式资源并不是一个想法.嵌入式资源被打包到dll中,之后你无法在不重新编译的情况下更改配置(这首先是配置文件的想法).

  • 某些配置仅用于开发目的,而不用于部署配置.仍然需要此功能. (14认同)
  • 那么,有几种方法可以做到这一点.我认为,与从配置文件中获取值相比,在这种情况下,设置(静态)类中的硬编码常量要快得多.因为嵌入式资源需要重新编译来更改值,所以在更改其中的某些值后需要重新编译的类并不是一种损失.执行此操作的其他技术是为配置文件中找不到的值提供默认值 - 不需要为部署指定值,并且可以使用非嵌入资源文件在开发环境中覆盖... (2认同)

Max*_*ing 6

一种选择是使用配置对象来包含任何配置设置的默认值。然后,您可以在配置对象的构造函数中尝试使用 app.config、数据库配置表等中的值覆盖默认配置值。

这有多种用途:

  1. 单元测试工具(例如 nUnit)需要特殊配置才能访问 app.config。
  2. app.config 文件的存在不是必需的,因为它将使用默认值(这似乎是您的目标)。
  3. 可以帮助确保类型安全的配置值。

一个简单的例子:

public class MyConfiguration
{


    private string _defaultValue1 = "Value1";
    private int _defaultValue2 = 22;



    public string Value1
    {
        get
        {
            return _defaultValue1;
        }
    }

    public int Value2
    {
        get
        {
            return _defaultValue2;
        }
    }

    #region cnstr

    public MyConfiguration()
    {
        LoadValuesFromConfigurationXml();
    }

    #endregion


    public static MyConfiguration GetConfig()
    {
        // Optionally Cache the config values in here... caching code removed 
        // for simplicity
        return new MyConfiguration();
    }    

    internal void LoadValuesFromConfigurationXml()
    {
        int tempInt;

        string value = ConfigurationManager.AppSettings["Value1"];

        if (!String.IsNullOrEmpty(value))
        {
            _defaultValue1 = value;
        }

        value = ConfigurationManager.AppSettings["Value2"];

        if (!String.IsNullOrEmpty(value))
        {
            if (int.TryParse(value, out tempInt))
            {
                _defaultValue2 = tempInt;
            }
        }


    }

}
Run Code Online (Sandbox Code Playgroud)

要访问配置值,请使用:MyConfiguration.GetConfig().Value1

希望这有帮助,麦克斯