【问题标题】:What use has the default (assembly).dll.config file for .NET-Assemblies?.NET-Assemblies 的默认(程序集).dll.config 文件有什么用?
【发布时间】:2014-02-07 12:13:22
【问题描述】:

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

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

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

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

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

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

我尝试将此文件复制到我的program\bin\release 文件夹中,assembly.dll 在构建操作中被复制到该文件夹​​中,但assembly.dll 会忽略同一文件夹中是否存在assembly.dll.config 文件。它总是使用编译时的设置。我只是不明白assembly.dll.config 文件的使用。为什么在它对 assembly.dll´s 行为没有影响的情况下会创建它?

【问题讨论】:

  • 你那里也有 program.exe.config 文件吗?是否已将设置合并到其中?
  • 是的,我的 program.exe 也有一个配置文件,但它只包含程序的配置。它们与组件的配置完全不同,所以我可以肯定地说。

标签: c# xml configuration-files


【解决方案1】:

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

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

示例程序.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>

【讨论】:

  • 你是对的。将我的程序集设置复制到 program.exe.config 中,程序集使用这些设置。所以我假设自动创建 assembly.dll.config 文件的唯一目的是将内容复制到另一个配置文件?
  • Visual Studio 还可以检测您的程序集 .config 和 .settings 是否不同步,在这种情况下,它会为您提供同步文件。这意味着您也可以采用另一种方式:在程序设置中调整您的设置,然后轻松地将值复制回新的默认值。
  • 除非我做错了什么,否则这似乎不再起作用。对我来说,它失败并出现以下错误:“配置系统无法初始化---> System.Configuration.ConfigurationErrorsException:无法识别的配置部分applicationSettings/MyAssemblyNamespace.Properties.Settings。”
【解决方案2】:

程序集可以使用OpenExeConfiguration 方法打开它喜欢的任何配置文件。这种方式可以访问他们自己的配置,而不是从执行程序集中隐式可用的配置。这通常不会这样做,但没有什么可以阻止您这样做。

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

【讨论】:

    猜你喜欢
    • 2018-07-02
    • 1970-01-01
    • 2012-05-20
    • 2011-08-12
    • 2012-03-30
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多