none
Config文件读取的问题 RRS feed

  • 问题

  • 现在有一个系统A,是一个Windows应用程序,在程序里有读AppSettings.

    有一个新系统B,也是Windows应用程序,现在要把A集成到B,现在的做法是把A改成类库项目,生成a.Dll,a.dll.config,但遇到一个问题,ConfigurationManager.AppSettings["Key"]读配文件,现在读的不再是a项目的配置文件,而变成了B的配置文件,有什么解决办法吗?

    不要说把配置信息写到B的配置文件里,除此之外的解决方法.


    2010年4月29日 9:52

答案

全部回复

  • 如果你直接用 ConfigurationManager.AppSettings["Key"] 这个方法取读,内部读的是当前运行程序的 config,这无法改变,

    ConfigurationManager 是一个静态类,提供了访问 Configuration 的快捷方式,

    如果你要读另外的 config,你可以使用 ConfigurationManager.OpenExeConfiguration(configPath) 方法返回指定的 Configuration 对象,然后再访问 Configuration.AppSettings

    详细用法见:

    http://msdn.microsoft.com/zh-cn/library/system.configuration.configuration.aspx
    http://msdn.microsoft.com/zh-cn/library/system.configuration.configuration.appsettings.aspx


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    • 已标记为答案 male110 2010年4月30日 2:06
    • 取消答案标记 male110 2010年4月30日 2:20
    • 已标记为答案 male110 2010年4月30日 3:13
    2010年4月30日 1:59
  • string str=ConfigurationManager.OpenExeConfiguration(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Oms.dll.config")).AppSettings["test"];为什么会报错?
    2010年4月30日 2:19
  • xiaofeng wang,你好!

          我想请教你一下关于ConfigurationManager. OpenExeConfiguration(string exePath)这个方法,网上的讨论已经很多了,按照原型的意思,传递的参数应该是可执行文件的路径,而不是配置文件的路径(我个人认为)这里文档中的描述有误!

          如果你传递的是XXX.config,实际上他会自动添加一个config后缀,实际上读取的是XXX.config.config,这个文件通常不存在,所以得到Configuration为null


    周雪峰
    2010年4月30日 2:34
    版主
  • 你好 使用 string str=ConfigurationManager.OpenExeConfiguration(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Oms.dll")).AppSettings["test"];为什么会报错?

     

    這個方法是打開可執行程序的配置文件的 建議你直接使用Settings 在項目屬性->配置那裡可以添加

    添加后 可以通過 public static string Test(string key)
            {
                return Properties.Settings.Default[key].ToString();
            }

    訪問

     

    或者將其設置合並到程序B的App config中 建議增加新的節點即可


    I see you~http://hi.baidu.com/1987raymondMy Blog~~~
    • 已标记为答案 male110 2010年4月30日 2:55
    • 取消答案标记 male110 2010年4月30日 3:05
    2010年4月30日 2:46
    版主
  • string str=Properties.Settings.Default["a"].ToString();
                if (str != null)
                {
                    MessageBox.Show(str);
                }
                else
                {
                    MessageBox.Show("无法读取配置信息");
                }

    这样不行吧,Properties.Settings.Default["a"]就出错了.


    2010年4月30日 3:06
  • 问题是我写上面的代码就提示出错了,不是运行时
    2010年4月30日 3:07