C# 对于.NET程序集,默认的(assembly).dll.config文件有什么用途?

C# 对于.NET程序集,默认的(assembly).dll.config文件有什么用途?,c#,xml,configuration-files,C#,Xml,Configuration Files,我有一个关于C#中应用程序设置的问题。 首先,我将描述我的情况 我的解决方案包括一个可执行程序program.exe和一个assembly.dll 程序引用程序集并使用它。程序集项目具有使用Visual Studio项目设置管理器设置的应用程序设置。现在,当我在assembly\bin\release文件夹中编译解决方案时,有一个assembly.dll.config文件,其中包含我先前设置的设置 现在我不明白的是:在我的程序项目中,我引用了assembly.dll,我检查了CopyLocal=

我有一个关于C#中应用程序设置的问题。 首先,我将描述我的情况

我的解决方案包括一个可执行程序
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项目应用程序设置中设置的设置

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

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


我尝试将此文件复制到我的
program\bin\release
文件夹中,其中
assembly.dll
被复制到生成操作中,但是
assembly.dll
只会忽略同一文件夹中是否存在
assembly.dll.config
文件。它总是使用compiletime中的设置。我只是不明白
assembly.dll.config
文件的用法。为什么在对
程序集.dll的
行为没有影响的情况下创建它?

程序集可以使用该方法打开它喜欢的任何配置文件。这样,用户就可以访问自己的配置,而不是执行程序集隐式提供的配置。这是不常见的,但没有什么可以阻止你这样做


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

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

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

示例program.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>

... 对所有dll设置的引用。。。
... 更多配置文件。。。
... 覆盖您的dll设置。。。
100

您是否也有program.exe.config文件?设置是否合并到该文件中?是的,my program.exe也有一个配置文件,但它只包含程序的配置。它们与程序集的配置完全不同,所以我可以肯定地说是taht。你是对的。将我的程序集设置复制到program.exe.config中会起作用,程序集将使用这些设置。因此,我假设自动创建assembly.dll.config文件的唯一目的是将内容复制到另一个配置文件?Visual Studio还可以检测assembly.config和.settings是否不同步,在这种情况下,它将为您提供同步文件的功能。这意味着你也可以选择另一种方式:在程序设置中调整你的设置,并轻松地将这些值复制回新的默认值。除非我做错了什么,否则这似乎不再有效。对我来说,它失败了,出现了以下错误:“配置系统未能初始化-->system.Configuration.ConfigurationErrorsException:无法识别的配置节applicationSettings/MyAssemblyNamespace.Properties.Settings。”