草庐IT

c# - 在.NET中在运行时合并自定义配置节

coder 2024-05-19 原文

我的问题是关于使用标准.NET配置对象和自定义配置元素(可以通过扩展 System.Configuration.ConfigurationSection 类进行定义)。我们通常从 System.Configuration.ConfigurationManager 类的方法中获得这些信息,以 GetSection(...) 为例。

加载的配置对象似乎是一个合并的配置对象,其中包含应用程序配置文件(开发人员可能已经创建的 app.config web.config 文件)中存在的设置以及机器中定义的内容.config 文件(后者随.NET Framework安装一起提供)。

因此,我们可以假设该配置以分层方式加载,首先使用 machine.config ,并且任何覆盖该默认设置的用户定义配置都可以如下所示:

  • machine.config
  • app.config (使用machine.config中的各个元素覆盖/合并)

  • 我的目标是创建多层配置,以便在 machine.config app.config 文件之间(如果可能,之后)可能还有其他配置文件:
  • machine.config
  • custom.config (在machine.config和app.config文件之间进行干预的自定义配置)
  • app.config -现在 app.config 已与 machine.config custom.config
  • 合并


    更新

    关键是-如果我在 custom.config app.config 中都定义了配置部分,则当我调用ConfigurationManager.GetSection("MyCustomSection")时,我需要获得两个配置的合并版本。理想情况下,如果我能够按照this MSDN article中的描述执行合并,那就太好了。

    通常,我会编写自己的配置管理器类,并尽我所能获得所需的结果,但是假设.NET框架适用于 machine.config app.config ,我认为我可能会受益于框架的内置功能。另外,如果确实应该采用我自己的配置管理器实现,则我不知道如何手动触发这种合并。

    因此,是否有可能利用配置节/元素与内置配置文件合并的内置机制?我对开发和支持定制配置部分特别感兴趣。 System.Configuration命名空间包含用于构建配置节和元素的基础对象,并且这些基础对象允许进行一些与合并相关的设置(例如,设置适当的 ConfigurationElementCollectionType )。这些是否仅与 machine.config (或Web应用程序中的多层 web.config 文件)合并有关,还是可以手动触发预加载的配置文件合并?我试图避免必须在我的任何自定义配置对象中支持自定义合并,并且可能忘记了从System.Configuration支持现有设置...

    更新

    我想对现有的答案和评论做出重要的说明。我能够从当前应用程序设置( app.config / web.config )和物理文件(即我的 custom.config )中加载ConfigurationSection对象。我需要知道是否有机会通过框架中的某些内置方法来合并这些对象,而无需求助于反射和逐属性比较。


    注意:我希望能在.NET 3.0+上运行的解决方案更好。如果您的答案针对该框架的更高版本,请添加注释。

    最佳答案

    The .NET configuration system is not super flexible



    该评论将其钉在钉子上,并解释了为什么您一直寻找了很长时间却还没有找到任何东西。并非.NET Framework的所有部分都“不错”,System.Configuration应该放在最底端。它为最终要完成的任务而设计得过于荒谬,但同时又变得极其不灵活。我很难对这种情况的发生进行逆向工程,我认为它因安全性问题而瘫痪了。也许可以理解,用数据指挥程序总是很大的风险。

    我知道的唯一扩展点是编写自己的SettingsProvider。该框架只有一个用于一般用途的LocalFileSettingProvider类。同样非常不灵活,没有任何方法可以改变其行为。对于自定义设置提供程序,有一个不错的示例,RegistrySettingsProvider sample演示了在注册表中存储设置的提供程序。这可能是编写自己的好起点。

    也许您的想法并不完全正确,但是请不要怀疑您可以闯入System.Configuration内部的层次结构。

    关于c# - 在.NET中在运行时合并自定义配置节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30028171/

    有关c# - 在.NET中在运行时合并自定义配置节的更多相关文章

    1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

      总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

    2. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

      作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

    3. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

      我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

    4. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

      我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

    5. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

      在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

    6. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

      我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

    7. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

      exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

    8. ruby - 无法运行 Rails 2.x 应用程序 - 2

      我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

    9. ruby - 如何模拟 Net::HTTP::Post? - 2

      是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

    10. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

      我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

    随机推荐