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 ...
随机推荐
- 超级有用的15个mysqlbinlog命令
在MySQL或MariaDB中,任意时间对数据库所做的修改,都会被记录到日志文件中.例如,当你添加了一个新的表,或者更新了一条数据,这些事件都会被存储到二进制日志文件中.二进制日志文件在MySQL主从 ...
- 为什么“how to say”是错的?
2018-04-26 15:53 英语口语 吉米老师前言:如果让老外评选十大Chinglish之最,老师猜"how to say"一定榜上有名.几乎每一位学习英语的童鞋,都曾有过脱 ...
- instrument之Time Profiler总结
一.工欲善其事必先利其器 time profile时间分析工具用来检测应用CPU的使用情况,可以看到应用程序中各个方法正在消耗CPU时间,使用大量CPU不一定是个问题.客户端中动画就对CPU依赖就非常 ...
- [skill][graphviz] 到底用什么画图: graphviz/inkscape/yed
官方教程文档:http://www.graphviz.org/pdf/dotguide.pdf 一:在文档里抄一个简单的例子 /home/tong/Src/copyright/onescorpion/ ...
- 图->存储结构->邻接表
文字描述 邻接表是图的一种链式存储结构.在邻接表中,对图中每个顶点建立一个单链表,第i个单链表的结点表示依附顶点vi的边(对有向图是指以顶点vi为尾的弧).单链表中的每个结点由3个域组成,其中邻接点域 ...
- sqlserver2014两台不同服务器上数据库同步
sqlserver2014两台不同服务器上数据库同步 同步了快一个月了,哈哈,因为途中比较麻烦,第一次,遇到烦的地方就停下了,今天终于同步成功了,哈哈,下面我就来介绍一下我实现两台数据库同步的过程 ...
- Python开发【异步】:asyncio
异步asyncio asyncio是一个使用async / await语法编写并发代码的库. asyncio用作多个Python异步框架的基础,这些框架提供高性能的网络和Web服务器,数据库连接库,分 ...
- SpringBoot-热部署Devtools
热部署 什么是热部署 所谓的热部署:比如项目的热部署,就是在应用程序在不停止的情况下,实现新的部署 项目演示案例 @RestController @Slf4j public class IndexCo ...
- [转载]MACD 各周期指标状态
MACD指标:MACD指标是一个非常好用的指标,它与均线.量价关系配合使用对判断行情很有效.这里有必要再深一点讲MACD级别之间的作用. 一.首先,必须明白的是任何指标中都是大级别包含小级别,小级别对 ...
- windows xp 不支持Wap2加密方式
故障:错误提示“Windows无法连接到选定网络,网络可能不在区域中.请刷新可用网络的列表,重新尝试.” 原因:windows xp并不直接支持Wap2加密方式的~估计是windows xp比较老了吧 ...