C# CLR如何处理配置设置

C# CLR如何处理配置设置,c#,C#,我很困惑配置文件是如何处理的:基本上每个应用程序都有一个配置,它加载在某个地方,可以很容易地访问。 但是我们有通过反射动态调用的DLL,甚至它们可以从配置中获取数据。这怎么可能 甚至更多:如果DLL位于另一个服务器/位置,如何获取所需的数据 我知道如何将配置文件与Transform等一起使用,但我没有找到好的文章,这些信息是如何保存在内存中的,传播数据的魔力是如何发生的。从开始。重要概念: 使用位于[runtime path]\config\目录中的machine.config文件为每台机器全

我很困惑配置文件是如何处理的:基本上每个应用程序都有一个配置,它加载在某个地方,可以很容易地访问。 但是我们有通过反射动态调用的DLL,甚至它们可以从配置中获取数据。这怎么可能

甚至更多:如果DLL位于另一个服务器/位置,如何获取所需的数据

我知道如何将配置文件与Transform等一起使用,但我没有找到好的文章,这些信息是如何保存在内存中的,传播数据的魔力是如何发生的。

从开始。重要概念:

  • 使用位于[runtime path]\config\目录中的machine.config文件为每台机器全局配置.NET运行时
  • 每个应用程序都可以覆盖计算机配置
  • 应用程序配置文件还包含特定于应用程序的设置
配置详细信息取决于应用程序的宿主方式。ASP.NET应用程序及其相关程序(MVC、Web API等)具有复杂的配置层次结构。在Machine.config之后,有一个IIS ApplicationHost.config,在web根目录中有一个可能的配置文件,为您的网站进行配置,然后为应用程序中的每个子目录进行可选配置。您可以在中阅读更多关于它的信息

独立应用程序(如窗体应用程序、控制台应用程序和Windows服务)有一个命名约定为[app name].exe.config的配置文件

除此之外,运行时使所有配置可用于使用静态类加载的程序集。没有真正的魔法。ConfigurationManager只是最终合并配置状态(大多数本地设置获胜)上的单例抽象

如果您的配置数据比键和值更复杂,请考虑.< /P>


对于读取外部服务器/位置上的配置文件,没有现成的支持。然而,通过实现一个。通常,此提供程序用于非默认配置加密。只要有一点创意,它就可以被黑客攻击,让我们可以将配置数据存储在任何我们喜欢的地方。有关详细信息,请参阅。

app.exe.config文件很重要,CLR在启动exe之前使用它配置主AppDomain。这是必要的,因为还没有AppDomainSetup,这是一个鸡和蛋的问题。DLL没有.config文件,它们应该与EXE加载的任何内容一起播放。如果您需要配置使DLL正确运行,而不管EXE使用什么,那么您将需要一个单独的XML文件或将配置设置公开为属性,以便EXE可以设置它们。因此,配置数据加载在AppDomain中,但可以在所有位置共享,是否存在一些隐藏的魔法我们将接下来探讨这是如何工作的?