2012-08-24 18 views
4

我有一个普遍的问题,但我也会解释我为什么要问你可以更好地了解我的意思。加载系统配置属性的.net层次结构是什么

我有一个dll,它具有在Settings中定义的webservice url,并且在运行时它使用Settings.Default从设置中获取URL。但是,我们的环境中都没有(dllName).dll.config文件,并且未在调用应用程序的(exeName).exe.config中定义特定设置。很明显,默认值没有被使用,因为它被设置为某个内部IP地址;但是这在生产中起作用,他们没有在我能找到的任何.config文件中定义的此设置,并且它仍以某种方式击中正确的Web服务URL。在这种情况下,我需要知道从哪里加载值。

所以我更加宽泛的问题是,层次结构如何在.net中加载设置?例如,它是否先查看machine.config,然后(exeName).exe.config,以及它是否是一个dll(dllName).dll.config?它首先看什么,它在其他地方看到的顺序是什么,还有没有其他地方我没有提到可以定义这个配置?

另外,对于一个DLL,如果你在Settings中定义了某些东西,它是否嵌入编译后的dll中作为默认值,如果在其他.config文件中找不到该属性,是否使用该属性?

+1

像这样的事情 - http://msdn.microsoft.com/en-us/library/ms178685(v=vs.100).aspx? – t3hn00b

+0

来自@ t3hn00b的良好链接。它应该是一个答案。 – Kamil

回答

6

.NET配置的分层性质提供了很大程度的灵活性 ,允许特定用户或位置有自己的 配置设置。但是,这些配置设置不是 隔离,而在更具体的级别进行的重复设置具有 覆盖在较低特定级别进行的设置的功能。如图所示,可以是 ,最具体的配置文件合并为 不太具体,最具体的设置覆盖最不特定的 。在Exe上下文中,用户(或更准确地说,本地 用户)设置是最具体的,其次是漫游用户(在两台或多台机器之间共享 ),应用程序和最后是机器。

Config hierarchy and merging

我建议你阅读下面的文章,因为你的答案只是一个引用:

而且有用的将是:

+0

除非您的图片和文字是您自己的,请给出适当的归属。 – wal

+0

是的,我知道,评论仍然适用。这个答案只是从该文章的剪切/粘贴 – wal

+0

@wal答案与参考。当答案是MSDN文章或任何其他文章的一部分时,认为引用会很好,特别是在“广泛的问题”上。 – Regfor