Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否将App.config应用于我的DLL程序集?_C#_Dll_Configuration - Fatal编程技术网

C# 是否将App.config应用于我的DLL程序集?

C# 是否将App.config应用于我的DLL程序集?,c#,dll,configuration,C#,Dll,Configuration,我正在编写一个类库作为一个抽象,用于登录我编写的任何应用程序、服务等。通过使其非常可配置,以满足我遇到的大多数应用程序/服务日志记录场景的需要,我使其变得相当健壮 配置用于指定以下内容: 要写入的日志记录级别是什么 写入所有级别的一个日志文件 写入每个级别的单独文件 日志切断(周期性、应用程序事件、字节大小受限) 日志文件过期(在文件过期后删除日志文件) 以纯文本或XML格式编写 日志文件名格式规范 是否在文件名前加上日期前缀 父应用程序的名称 等等,等等,等等 我已经阅读了其他一些有关DL

我正在编写一个类库作为一个抽象,用于登录我编写的任何应用程序、服务等。通过使其非常可配置,以满足我遇到的大多数应用程序/服务日志记录场景的需要,我使其变得相当健壮

配置用于指定以下内容:

  • 要写入的日志记录级别是什么
  • 写入所有级别的一个日志文件
  • 写入每个级别的单独文件
  • 日志切断(周期性、应用程序事件、字节大小受限)
  • 日志文件过期(在文件过期后删除日志文件)
  • 以纯文本或XML格式编写
  • 日志文件名格式规范
  • 是否在文件名前加上日期前缀
  • 父应用程序的名称
  • 等等,等等,等等
我已经阅读了其他一些有关DLL程序集配置的stackoverflow问题,这些问题会导致宿主程序集/应用程序的app.config之间发生冲突。我相信我的程序集有理由提供一个配置文件


这是那个场合的好情况吗?将我自己的配置烘焙到我的项目中,以便我的记录器从XML文件中读取配置值,这可能是一个更好的主意吗?

听起来自定义配置部分在您的情况下会很好地工作。许多库(如企业库)正是这样做的。查看“关于创建一个”对话框。

该.NET配置机制并不用于处理DLL的配置文件。您应该使用适当的设置配置应用程序,并将它们传递给正在从DLL实例化的类


可以像通常对应用程序那样向DLL项目添加设置。然后,您只需手动将相关部分和条目复制到应用程序的app.config中即可

然而,复制DLL的配置文件仍然是毫无意义的。它不会被阅读

你能做的是

  • 创建自定义配置部分(例如使用工具)

  • 将程序集的配置放入单独的
    MyAssembly.config
    文件中

  • 从主机应用程序的配置中引用该程序集配置文件:

    <configuration>
       <configSections>
           <section name="YourAssembly" 
                    type="YourAssembly.ConfigSection, YourAssembly" />
       </configSections>
    
       <YourAssembly configSource="MyAssembly.config" />
    </configuration>
    
    
    

通过这种方式,您可以将配置“外部化”到一个单独的配置文件中,您只有一次配置文件(在程序集的项目中),任何需要它的项目只需要在其自己的配置文件中进行这些设置。

另一种机制是为程序集提供一个单独的配置文件(*.dll.config)。技术如下所示:

如上所述,模拟程序集的标准app.config技术


在我看来,dll配置读取代码应该只存在于相应的dll中,并且在一个单独的类中—只负责从*.dll.config读取配置条目。这是一种以类似于可执行文件的配置文件(app.config)的方式为程序集创建配置文件的好方法。

查看现有的日志库,例如apaches log4net-此库也可以轻松扩展。也许写一个全新的日志库不值得。@bja,谢谢你的建议。我已经为正在工作的项目编写了大量日志代码,并决定将大部分代码用作未来应用程序的基础。我以前确实尝试过使用日志框架,但很沮丧,因为我的部门想要使用.NET4.0,而我在使用一两个lib时遇到了问题。所以我最终实现了自己的轻量级日志记录。非常感谢你的建议,但是,我通常同意这一想法,但这并不是不重用我自己的代码的理由。@jlafay我建议无论如何都要看看它们——不要重用它们的代码——而是看看它们是如何通过App.config文件配置的——通过App.config文件配置日志框架是很常见的,您可以在自己的框架中遵循相同的做法。:-)由于我将在大量软件应用程序中使用此功能,因此使用一个我可以快速手动编辑的配置文件来动态配置它,而不是在主机应用程序中实例化记录器时填充属性,这不是更好吗?@jlafay-否,那么您正在向DLL添加一个隐藏的依赖项。您仍然可以创建一个配置文件——只需让您的应用程序读取配置文件(或复制到其配置中的该文件的一部分)并将设置从DLL传递给类即可。(和+1。)呃…,许多DLL需要更改.config文件(特别是日志框架DLL)。您只需将相关的配置部分添加到app.config中,它就可以正常工作,无需额外的代码更改。链接+1。多年来,我一直在手动编写ConfigurationSection和ConfigurationSectionGroup类。这个工具看起来像个救命稻草!我认为这是满足我配置需求的最佳解决方案。也感谢您提供到配置部分设计器的链接!