首页 新闻 会员 周边

C#dll类库项目使用配置文件如何在不编译的情况下修改配置后生效

0
悬赏园豆:20 [已关闭问题] 关闭于 2014-04-10 08:53

目前遇到个问题是,dll使用app.config配置,从配置中读取的信息可以使用,但是如果我在vs外部修改了配置文件的值,不编译程序的情况下,更改后的值无效,我是想做到修改配置文件的内容后,程序不需要编译也可以使用更改后的值,目前我的做法是将配置信息放到调用方(即客户端配置,这样感觉怪怪的)请大侠帮帮忙。

c#
_劍客的主页 _劍客 | 初学一级 | 园豆:94
提问于:2014-04-08 15:36
< >
分享
所有回答(2)
0

楼主,如果可以的话,您可以先用txt的方式读取,那个的话,只要每次的流都重新读取了就没问题,可以保证每次都是最新的数据,

关于app.config的话,我正在帮您研究如何能在每次在做的时候重新加载一下app.config,我觉得这个是关键问题的所在。

seaconch | 园豆:4823 (老鸟四级) | 2014-04-08 17:44

txt方式,你指的是dll读取该类库下文件方式吗,我刚在尝试读取资源文件。总是返回null。

string xmlNamespace = "JDD.Bank.CMBFbSdk"; //XML文件所在的命名空间
string xmlPath = "JDD.Bank.CMBFbSdk.xx.xml"; //XML文件的路径( namespace + filename )
Assembly myAssembly = Assembly.Load(xmlNamespace);
Stream strm = myAssembly.GetManifestResourceStream(xmlPath);
Stream s = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(@"JDD.Bank.CMBFbSdk.xx.xml");

支持(0) 反对(0) _劍客 | 园豆:94 (初学一级) | 2014-04-08 18:05
0

关键代码:

namespace JDD.Bank.CMBFbSdk.Common
{
    internal static class ConfigManager
    {
        readonly static bool _Error;

        static Configuration _AppConfig;

        static ConfigManager()
        {
            string dllPath = string.Format( "{0}\\{1}.dll", AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory, "JDD.Bank.CMBFbSdk");

            try
            {
                _AppConfig = ConfigurationManager.OpenExeConfiguration(dllPath);
            }
            catch(ConfigurationErrorsException)
            {
                _Error = true;
            }
        }

        public static KeyValueConfigurationCollection AppSettings
        {
            get 
            {
                if (_Error) return null;
                return _AppConfig.AppSettings.Settings;
            }
        }

        public static ConnectionStringSettingsCollection ConnectionStrings
        {
            get
            {
                if (_Error) return null;
                return _AppConfig.ConnectionStrings.ConnectionStrings;
            }
        }

        public static T GetSection<T>(string name) where T : ConfigurationSection
        {
            if (_Error) return null;
            return _AppConfig.GetSection(name) as T;
        }
    }
}
_劍客 | 园豆:94 (初学一级) | 2014-04-10 08:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册