在项目中我们会经常用到App.config文件,有的是自动生成的,比如引用webservice、wcf服务时生成;也有手动建立的配置文件直接默认名就为app.config。
这些配置有的保存当前程序集用到的一些可供外部改动的变量,比如:

  1. <configuration>
  2. <appSettings>
  3. <add key="keyName" value="value"/>
  4. </appSettings>
  5. </configuration>

这种的配置直接使用 ConfigurationManager.AppSettings["key名"]来读取比较方便。例如:

  1. public class ReadConfig
  2. {
  3. public static string ConfigKeyValue
  4. {
  5. string config = ConfigurationManager.AppSettings["ConfigKeyValue"];
  6. config = string.IsNullOrEmpty(config) ? "空字符串" : config;
  7. return config;
  8. }
  9. }

有表示数据库连接的比如ADO.NET Entity连接数据时会生成配置。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <configuration>
  3. <startup>
  4. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  5. </startup>
  6. <connectionStrings>
  7. <add name="OracleEntities" connectionString="" />
  8. </connectionStrings>
  9. </configuration>

有Microsoft.Practices.EnterpriseLibrary连接数据库的配置 (http://blog.csdn.net/yysyangyangyangshan/article/details/8488791)。
再有
”混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行“错误时要用的,

  1. <?xml version="1.0"?>
  2. <configuration>
  3. <startup useLegacyV2RuntimeActivationPolicy="true">
  4. <supportedRuntime version="v4.0" sku = ".NETFramework,Version=v4.0"/>
  5. <supportedRuntime version="v2.0.50727"/>
  6. </startup>
  7. </configuration>

等等,总之app.config作用很多。

但是在一个项目中很多程序集都要用到app.config该怎么办呢?比如如下情况:


FouctionDll程序集中配置:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <appSettings>
  4. <add key="key1" value="你好,世界!"/>
  5. </appSettings>
  6. </configuration>

主目录TestAppConfig中的配置:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <appSettings>
  4. <add key="key2" value="Hello,world!" />
  5. </appSettings>
  6. </configuration>

这样的情况下,如果主程序集需要引用FouctionDll,配置被复制过来由于配置名重复,自然会被主程序的配置覆盖。
还有就是如果FouctionDll中要引用远程服务,会自动生成app.config,一旦主程序引用该配置依然无法使用。
针对这样,应该做如下解决:
1、第一种情况,每一个程序集的配置是手动增加的话,将起名字改变。读取方式不再使用
 ConfigurationManager.AppSettings["key"]来读取,可改为:

  1. public class ReadConfig
  2. {
  3. private static string currentConfig = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"ConfigName.config";
  4. /// <summary>
  5. /// 判断是否有人操作的间隔时间
  6. /// </summary>
  7. public static string ConfigKeyValue
  8. {
  9. get
  10. {
  11. string time =GetAttributeValue(currentConfig,"ConfigKeyValue");
  12. if (string.IsNullOrEmpty(time))
  13. {
  14. return "180";
  15. }
  16. return time;
  17. }
  18. }
  19. /// <summary>
  20. /// 获取配置文件的属性
  21. /// </summary>
  22. /// <param name="key"></param>
  23. /// <returns></returns>
  24. private static string GetAttributeValue(string file, string key)
  25. {
  26. string value = string.Empty;
  27. try
  28. {
  29. if (File.Exists(file))
  30. {
  31. XmlDocument xml = new XmlDocument();
  32. xml.Load(file);
  33. XmlNode xNode = xml.SelectSingleNode("//appSettings");
  34. XmlElement element = (XmlElement)xNode.SelectSingleNode("//add[@key='" + key + "']");
  35. value = element.GetAttribute("value").ToString();
  36. }
  37. }
  38. catch { }
  39. return value;
  40. }
  41. }

这种方式的好处是让每个程序集相对独立,缺点是如果是自动生成的app.config则还是会有上述问题。那么对于需要用到的名字必须是app.config的情况该如何呢?
可以使用超链接的方式,就是在项目中只有主程序使用app.config,其他程序集使用它的链接,这样共同使用,如图

读取还是在当前目录下使用ConfigurationManager.AppSettings["keyName"];

这种方式的好处是,可以解决了几个程序集共用一个app.config的问题,缺点是程序集不独立,因为引用了同一个文件,程序集在移动目录是需要重新检查再手动引用。
总之开发软件第一目的是软件功能正常,其次是我们开发时要尽可能的使自己方便,只有更方便,效率才能提高。
代码下载:http://download.csdn.net/detail/yysyangyangyangshan/5004721

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yysyangyangyangshan/article/details/8513735

C#项目中关于多个程序集下App.config文件的问题的更多相关文章

  1. MVC 项目中为什么会有两个web.config

    我们对MVC 并不陌生, 在创建MVC项目时,总会发现,在工程目录 中有两个 web.config 文件,一个是在工程的根目录下,一是在 views 下,两个web.config 中的内容也不尽相同, ...

  2. 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. ...

  3. WPF程序中App.Config文件的读与写

    WPF程序中的App.Config文件是我们应用程序中经常使用的一种配置文件,System.Configuration.dll文件中提供了大量的读写的配置,所以它是一种高效的程序配置方式,那么今天我就 ...

  4. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  5. C#项目实例中读取并修改App.config文件

    C#项目是指一系列独特的.复杂的并相互关联的活动,这些活动有着一个明确的目标或目的,必须在特定的时间.预算.资源限定内,依据规范完成.项目参数包括项目范围.质量.成本.时间.资源. 1. 向C#项目实 ...

  6. 修改和获取web.config或app.config文件appSettings配置节中的Add里的value属性 函数

    1: /// <summary> 2: /// 修改web.config或app.config文件appSettings配置节中的Add里的value属性 3: /// </summ ...

  7. TFS在项目中DevOps落地进程(下)

    紧接上篇 TFS在项目中Devops落地进程(上) 再接着说TFS相关之前先插入一个番外篇,虽然跟TFS关系不大但跟DevOps关系很大,觉得有必要在此乱入一下. 番外篇--监控之Applicatio ...

  8. 解决eclipse maven工程中src/main/resources目录下创建的文件夹所显示样式不是文件夹,而是"包"图标样式的问题

    参考:http://blog.csdn.net/luwei42768/article/details/72268246 eclipse项目中创建maven项目后,有时在执行命令maven update ...

  9. java中根据key获取resource下properties资源文件中对应的参数

    properties资源文件是放在resource目录下的: 新建工具类: package com.demo.utils; import java.io.InputStream; import jav ...

随机推荐

  1. 一个按成绩排序SQL的写法问题

    测试数据: SQL> select * from sscore; NAME       SCORE ---------- ----- aa            99 bb            ...

  2. Python:if __name__ == '__main__'

    简介: __name__是当前模块名,当模块被直接运行时模块名为_main_,也就是当前的模块,当模块被导入时,模块名就不是__main__,即代码将不会执行. 关于代码if __name__ == ...

  3. java发送get,post请求

    方法里面有注释:参照csdn里面的,项目用时自己改 package com.bst.express; import java.io.BufferedReader; import java.io.Dat ...

  4. [daily][archlinux][shell][fish] 使用最炫酷的shell工具fish

    用了好久的zsh, 才知道用那么多年的bash是多么的原始. 然而比zsh更好用的其实是fish, 但是不与bash兼容, 所以最终还是选择了zsh. 关于zsh的使用,配置方法, 可以翻前文查阅. ...

  5. 解决采集知乎数据时由于账号被封遗漏的账号重爬问题(python代码)

    '''一.最笨的办法了################################################################为了处理由于账号被封而没跑到的问题id进行以下两步 ...

  6. 获取 base64 的封装

    /** * 1. 如何实例化 const fileInput = await FileInput.init(fileInputEle, isMulFile) */ export class FileI ...

  7. JavaScript学习(七)

  8. SQL SERVER 基于数据库镜像的主从同步(数据库镜像实践汇总)

    SQL SERVER 基于数据库镜像的主从同步 Author:chaoqun.guo    createtime:2019-03-26 目录 SQL SERVER 基于数据库镜像的主从同步... 1 ...

  9. left outer join的on不起作用

    left outer join的on不起作用 Why and when a LEFT JOIN with condition in WHERE clause is not equivalent to ...

  10. mysql之event

    mysql之event http://blog.csdn.net/lxgwm2008/article/details/9088521 Mysql事件调度器(Event Scheduler)类似于定时器 ...