C#项目中关于多个程序集下App.config文件的问题
在项目中我们会经常用到App.config文件,有的是自动生成的,比如引用webservice、wcf服务时生成;也有手动建立的配置文件直接默认名就为app.config。
这些配置有的保存当前程序集用到的一些可供外部改动的变量,比如:
- <configuration>
- <appSettings>
- <add key="keyName" value="value"/>
- </appSettings>
- </configuration>
这种的配置直接使用 ConfigurationManager.AppSettings["key名"]来读取比较方便。例如:
- public class ReadConfig
- {
- public static string ConfigKeyValue
- {
- string config = ConfigurationManager.AppSettings["ConfigKeyValue"];
- config = string.IsNullOrEmpty(config) ? "空字符串" : config;
- return config;
- }
- }
有表示数据库连接的比如ADO.NET Entity连接数据时会生成配置。
- <?xml version="1.0" encoding="utf-8"?>
- <configuration>
- <startup>
- <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
- </startup>
- <connectionStrings>
- <add name="OracleEntities" connectionString="" />
- </connectionStrings>
- </configuration>
有Microsoft.Practices.EnterpriseLibrary连接数据库的配置 (http://blog.csdn.net/yysyangyangyangshan/article/details/8488791)。
再有
”混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行“错误时要用的,
- <?xml version="1.0"?>
- <configuration>
- <startup useLegacyV2RuntimeActivationPolicy="true">
- <supportedRuntime version="v4.0" sku = ".NETFramework,Version=v4.0"/>
- <supportedRuntime version="v2.0.50727"/>
- </startup>
- </configuration>
等等,总之app.config作用很多。
但是在一个项目中很多程序集都要用到app.config该怎么办呢?比如如下情况:

FouctionDll程序集中配置:
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <appSettings>
- <add key="key1" value="你好,世界!"/>
- </appSettings>
- </configuration>
主目录TestAppConfig中的配置:
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <appSettings>
- <add key="key2" value="Hello,world!" />
- </appSettings>
- </configuration>
这样的情况下,如果主程序集需要引用FouctionDll,配置被复制过来由于配置名重复,自然会被主程序的配置覆盖。
还有就是如果FouctionDll中要引用远程服务,会自动生成app.config,一旦主程序引用该配置依然无法使用。
针对这样,应该做如下解决:
1、第一种情况,每一个程序集的配置是手动增加的话,将起名字改变。读取方式不再使用
ConfigurationManager.AppSettings["key"]来读取,可改为:
- public class ReadConfig
- {
- private static string currentConfig = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"ConfigName.config";
- /// <summary>
- /// 判断是否有人操作的间隔时间
- /// </summary>
- public static string ConfigKeyValue
- {
- get
- {
- string time =GetAttributeValue(currentConfig,"ConfigKeyValue");
- if (string.IsNullOrEmpty(time))
- {
- return "180";
- }
- return time;
- }
- }
- /// <summary>
- /// 获取配置文件的属性
- /// </summary>
- /// <param name="key"></param>
- /// <returns></returns>
- private static string GetAttributeValue(string file, string key)
- {
- string value = string.Empty;
- try
- {
- if (File.Exists(file))
- {
- XmlDocument xml = new XmlDocument();
- xml.Load(file);
- XmlNode xNode = xml.SelectSingleNode("//appSettings");
- XmlElement element = (XmlElement)xNode.SelectSingleNode("//add[@key='" + key + "']");
- value = element.GetAttribute("value").ToString();
- }
- }
- catch { }
- return value;
- }
- }
这种方式的好处是让每个程序集相对独立,缺点是如果是自动生成的app.config则还是会有上述问题。那么对于需要用到的名字必须是app.config的情况该如何呢?
可以使用超链接的方式,就是在项目中只有主程序使用app.config,其他程序集使用它的链接,这样共同使用,如图

读取还是在当前目录下使用ConfigurationManager.AppSettings["keyName"];
这种方式的好处是,可以解决了几个程序集共用一个app.config的问题,缺点是程序集不独立,因为引用了同一个文件,程序集在移动目录是需要重新检查再手动引用。
总之开发软件第一目的是软件功能正常,其次是我们开发时要尽可能的使自己方便,只有更方便,效率才能提高。
代码下载:http://download.csdn.net/detail/yysyangyangyangshan/5004721
C#项目中关于多个程序集下App.config文件的问题的更多相关文章
- MVC 项目中为什么会有两个web.config
我们对MVC 并不陌生, 在创建MVC项目时,总会发现,在工程目录 中有两个 web.config 文件,一个是在工程的根目录下,一是在 views 下,两个web.config 中的内容也不尽相同, ...
- eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错? java.lang.ClassNotFoundException: com.branchitech.app.startup.AppStartupContextListener java.lang.ClassN
eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错?java. ...
- WPF程序中App.Config文件的读与写
WPF程序中的App.Config文件是我们应用程序中经常使用的一种配置文件,System.Configuration.dll文件中提供了大量的读写的配置,所以它是一种高效的程序配置方式,那么今天我就 ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- C#项目实例中读取并修改App.config文件
C#项目是指一系列独特的.复杂的并相互关联的活动,这些活动有着一个明确的目标或目的,必须在特定的时间.预算.资源限定内,依据规范完成.项目参数包括项目范围.质量.成本.时间.资源. 1. 向C#项目实 ...
- 修改和获取web.config或app.config文件appSettings配置节中的Add里的value属性 函数
1: /// <summary> 2: /// 修改web.config或app.config文件appSettings配置节中的Add里的value属性 3: /// </summ ...
- TFS在项目中DevOps落地进程(下)
紧接上篇 TFS在项目中Devops落地进程(上) 再接着说TFS相关之前先插入一个番外篇,虽然跟TFS关系不大但跟DevOps关系很大,觉得有必要在此乱入一下. 番外篇--监控之Applicatio ...
- 解决eclipse maven工程中src/main/resources目录下创建的文件夹所显示样式不是文件夹,而是"包"图标样式的问题
参考:http://blog.csdn.net/luwei42768/article/details/72268246 eclipse项目中创建maven项目后,有时在执行命令maven update ...
- java中根据key获取resource下properties资源文件中对应的参数
properties资源文件是放在resource目录下的: 新建工具类: package com.demo.utils; import java.io.InputStream; import jav ...
随机推荐
- vue $set的使用
在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新到视图上去: 当我们去看vue文档的时候,会发现有这么一句话:如果在实例创建之后添加新 ...
- C语言中点操作符(.)和箭头操作符(->)
C语言中点操作符(.)和箭头操作符(->) 点说语法不太准确,许多都称该之为点运算符/操作符,箭头运算符/操作符.但是OC中叫点语法,感觉理解起来还蛮舒服.毕竟基础的C操作符中是 相同点 两个都 ...
- [math] 绘制空间几何体的直观图
这么多年,一直凭着从天而降的神来之灵感画着立体图. 而今才知道在二维平面上绘制空间几何体的直观图也是有方法的.叫做“画法几何” 1. 斜二测图 就是倾斜y轴,使y轴与x轴成45度的夹角.见: http ...
- [skill][git] git 常用操作记录
傻瓜入门: step by step : https://try.github.io/levels/1/challenges/1 一本书: https://git-scm.com/book/en/v2 ...
- [skill] 补码
转载,写的很好!额,我的数学. 原文:https://www.douban.com/note/223507364/ 关于补码,看过一些书籍和网文,基本都是在“求反加一”的方法.步骤上反复强调,而对于补 ...
- spark Pair RDD 基础操作
下面是Pair RDD的API讲解 转化操作 reduceByKey:合并具有相同键的值: groupByKey:对具有相同键的值进行分组: keys:返回一个仅包含键值的RDD: values:返回 ...
- 转:HashMap实现原理分析(面试问题:两个hashcode相同 的对象怎么存入hashmap的)
原文地址:https://www.cnblogs.com/faunjoe88/p/7992319.html 主要内容: 1)put 疑问:如果两个key通过hash%Entry[].length得 ...
- 1、python接口测试requests
import requestsimport jsonr=requests.get('http://www.baidu.com') #get 请求方式r=r ...
- zedboard上首个驱动实践——Led
// led驱动 *myled.c*//头文件 #include<linux/module.h> //最基本的文件,支持动态添加和卸载模块 #include<linux/kernel ...
- 如何调用finecms指定栏目的描述关键词
有时我们在用finecms建站时需要调用指定栏目的描述和关键词,实现个性化需求,比如id为23的栏目很重要,要让它在首页展示出来,这时我们要如何调用呢?{dr_cat_value(23, 'name' ...