在项目中我们会经常用到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. find实现特殊功能示例

    find列出目录下所有文件: # find /shell-script/ # find /shell-script/ -print find列出文件夹中所有开头为text的文件,参数-iname意思忽 ...

  2. virtuanenv+flask

    1.virtualenv&flask 专门为特定项目创建一个目录和一个虚拟的Python 运行环境 # 1.安装 virtualenv$ pip3 install virtualenv #.创 ...

  3. linux命令瞎记录find xargs

    1.创建多个文件 touch test{0..100}.txt 2.重定向 “>>” 追加重定向,追加内容,到文件的尾部 “>” 重定向,清除原文件里面所有内容,然后把内容追加到文件 ...

  4. php源码笔记

    php global 你global了一个变量,那么Zend就会去全局symbol_table去寻找,如果找不到,就会在全局symbol_table中分配相应的变量.通过这样的机制,实现了全局变量. ...

  5. 在RAC执行相关操作发生ora-01031:insufficient privileges解决方法

    grid用户下 寻找命令的路径 如which crsctl su - root用户 然后根据找到的路径去执行命令 如 /u01/app/oracle/product/11.2.0/db_1/bin/c ...

  6. JMeter之http接口测试

    能做哪些类型性能测试 接口 文件传输(ftp) 数据库 支持自定义java组件开发 安装 http://jmeter.apache.org/ 进入上面的链接 选择合适版本下载 启动 使用 Jmeter ...

  7. 【pyqtgraph】pyqtgraph-鼠标互动

    pyqtgraph绘图库官方文档学习-鼠标互动(mouse interaction) 鼠标互动 大多数使用pyqtgraph数据可视化的应用程序都会生成可以使用鼠标进行交互式缩放,平移和配置的小部件. ...

  8. IntelliJ IDEA Ultimate 下载与安装

    一.下载 Intellij IDEA Ultimate 下载链接:https://www.jetbrains.com/idea/download/#section=windows 1.进入官网点击Ul ...

  9. python安装提示ImportError: No module named web

    今天在开发一个项目时出现错误,重新安装了一下python和yum,然后面板就无法启动了,提示需要安装web依赖,但是具体是哪个web源呢,pip install web不行 Traceback (mo ...

  10. svn .a文件上传不了

    最近mac电脑出现了问题,导致硬盘被格式化,所有文件都没了,打开app,一直缺少第三方文件libWeChatSDK.a,打开xcode文件变红了,找不到了,为了预防此类问题,在这里给出解决方法,如果没 ...