什么用途具有的默认(程序集).dll.config文件.NET程序集



我有一个关于C#中AppSettings的问题。首先我要描述一下我的情况。

我的解决方案由一个可执行程序program.exe和一个assembly.dll组成。

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

现在我不明白的是:在我引用assembly.dll的程序项目中,我检查了CopyLocal=True,但在我的programbinrelease文件夹中只有assembly.dll,而没有assembly.dll.config文件,但assembly.dll仍然知道我在汇编项目应用程序设置中设置的设置。

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

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

我尝试将此文件复制到我的programbinrelease文件夹中,assembly.dll在构建操作时复制到该文件夹中,但assembly.dll只是忽略同一文件夹中是否存在assembly.dll.config文件。它总是使用compiletime中的设置。我只是不理解assembly.dll.config文件的用途。为什么在它从未对assembly.dll´s行为产生影响的情况下创建它?

默认值内置在.dll文件中。当然,您仍然可以更改这些设置,但您可以在program.exe配置中更改,方法是在configSections/sectionGroup中的一节中引用程序集设置。然后,可以在applicationSettings中通过创建与节同名的XML块来更改程序集设置。

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

示例程序.exe.config:

<configuration>
<configSections>
... references to all dll settings ...
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="MyAssemblyNamespace.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
... more config stuff...
<applicationSettings>
... override your dll settings ...
<MyAssemblyNamespace.Properties.Settings>
<setting name="MaxUserNameLength" serializeAs="String">
<value>100</value>
</setting>
</MyAssemblyNamespace.Properties.Settings>
</applicationSettings>

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

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

最新更新