我正在开发.NET 3.5 Windows Forms应用程序。我有两个项目,UI和图书馆。
UI使用通常存储在app.config文件中的强类型设置。我使用UI.Properties.Settings类(由Visual Studio生成)读取它们。
Library使用自己的强类型设置(转储到Library.config文件中的Settings.settings文件)。
在运行时,Library设置不会从Library.config文件重新加载。运行时只读取UI.config文件。所以我在库程序集中遇到默认设置,在部署后无法提供值。
总结一下:对于不是主可执行文件的应用程序程序集,在程序集加载时不会读取设置。
我知道我可以使用ConfigurationManager.AppSettings [“value”],这将从默认的应用程序配置文件(UI.config)中读取,但如果我想要强类型设置(使用Properties.Settings类读取)该怎么办? ?
致电Library.Properties.Settings.Default.Reload()
将不会这样做。
感谢。
答案 0 :(得分:5)
您需要做的是将库配置部分合并到app.connfig。合并配置文件是通过首先在< configSections>内添加元素来完成的。 config元素,用于标识配置部分,然后在配置元素中添加配置元素。
合并配置文件的示例:
App config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="CA3.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<CA3.Settings>
<setting name="Setting" serializeAs="String">
<value>2</value>
</setting>
</CA3.Settings>
</userSettings>
</configuration>
图书馆配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="CA3.Library" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<CA3.Library>
<setting name="Setting" serializeAs="String">
<value>1</value>
</setting>
</CA3.Library>
</userSettings>
</configuration>
合并包含库和应用配置的app.config。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="CA3.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="CA3.Library" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<CA3.Settings>
<setting name="Setting" serializeAs="String">
<value>2</value>
</setting>
</CA3.Settings>
<CA3.Library>
<setting name="Setting" serializeAs="String">
<value>1</value>
</setting>
</CA3.Library>
</userSettings>
</configuration>
答案 1 :(得分:4)
每个AppDomain只能有一个.config文件。对于Windows窗体应用程序,该.config文件是以可执行文件命名的文件 - 在您的情况下为:UI.exe.config。
这意味着虽然您可能存在Library.dll.config文件,但配置系统永远不会启动它。
您应该将库的配置设置合并到应用程序配置文件中。 .NET框架不支持库的配置文件。
更好的是,重新设计您的库,使其不依赖于配置文件,而是使用Imperative Configuration。