.NET-Assemblies的默认(程序集).dll.config文件有什么用?

我对C#中的AppSettings有疑问。 首先,我将描述我的情况。

我的解决方案包括一个可执行程序program.exe和一个assembly.dll

该程序引用程序集并使用它。 程序集项目具有使用Visual Studio项目设置管理器设置的应用程序设置。 现在当我在assembly\bin\release文件夹中编译我的解决方案时,有一个assembly.dll.config文件,其中包含我之前设置的设置。

现在我不明白的事情:在我的程序项目中我引用了assembly.dll我已经检查了CopyLocal=True ,但是在我的program\bin\release文件夹中只有assembly.dll而不是assembly.dll .config文件但仍然是assembly.dll知道我在程序集项目应用程序设置中设置的设置。

现在我已经多次读过程序集总是访问可执行程序的设置但程序没有相应的设置,那么为什么程序集在没有assembly.dll.config文件时知道正确的设置?

我假设设置在编译时被编译到程序集中(当然),但是在我的assembly \ bin \ release文件夹中实际上有一个assembly.dll.config文件是没有意义的。

我尝试将此文件复制到我的program\bin\release文件夹中,其中assembly.dll被复制到构建操作,但如果在同一文件夹中存在assembly.dll.config文件,则assembly.dll忽略。 它始终使用来自compiletime的设置。 我只是不明白使用assembly.dll.config文件。 当它从未对assembly.dll´s行为产生影响时,为什么会创建它?

默认值内置于.dll文件中。 您当然可以更改这些设置,但是您可以在program.exe配置中执行此操作,方法是使用configSeconds / sectionGroup中的部分引用程序集设置。 然后,可以通过创建与该部分同名的XML块,在applicationSettings中更改程序集设置。

可以从程序集项目的app.config文件中简单地复制节组中的节标记。 这样,令牌,名称等将是正确的。 applicationSettings部分也是如此。 只需将其从程序集项目中的app.config复制到program.exe项目的app.config文件中即可。

示例program.exe.config:

   ... references to all dll settings ...  
... more config stuff... ... override your dll settings ... 100

对于程序集来说,使用OpenExeConfiguration方法打开它喜欢的任何配置文件是有效的。 这种方式可以访问自己的配置,而不是执行程序集中隐式可用的配置。 这种做法并不常见,但没有什么可以阻止你这样做。

如果你的程序集在没有配置文件的情况下正常运行,那么听起来它有一套合理的默认值,当它找不到合适的配置时它会使用它。