2009-09-09 67 views
4

我正在开发.NET 3.5 Windows窗体应用程序。我有两个项目,UI和一个库。程序集特定设置在运行时不加载

UI使用通常存储在app.config文件中的强类型设置。我使用UI.Properties.Settings类(由Visual Studio生成)读取它们。

库使用其自己的强类型设置(转储到Library.config文件中的Settings.settings文件)。

在运行时,Library设置不会从Library.config文件重新加载。运行时只读取UI.config文件。所以我坚持使用Library Assembly中的默认设置,并且无法在部署后提供值。

总结:对于不是主要可执行文件的应用程序集,在装配加载时不会读取设置。

我知道我可以使用ConfigurationManager.AppSettings [“值”],这将从默认的应用程序配置文件(UI.config)读取,但我可以做什么,如果我想强类型设置(阅读Properties.Settings类)?

通话Library.Properties.Settings.Default.Reload()不会这样做。

谢谢。

回答

5

你需要做的是将你的库配置部分合并到app.connfig。合并配置文件是通过首先添加配置元素内部的元素来完成的,以识别配置部分,然后添加配置元素内的配置元素。

合并配置文件的实施例:

应用配置:

<?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> 
+0

是的,谢谢,我已经尝试过与我的测试解决方案相同的解决方案,它的工作原理。 它不是straioghtforward,我不得不手动合并配置文件,但我可以使用生成的类来访问设置,这是很好的。我真的不喜欢使用类似ConfigurationManager.AppSettings [“Color”]的字符串。 – 2009-09-09 12:40:43

+0

那么,你的回答比我早,所以我删除了我的。 再次感谢! – 2009-09-09 12:43:01

4

每个AppDomain只能有一个.config文件。对于Windows Forms应用程序,该.config文件是以可执行文件命名的文件,即:UI.exe.config。

这意味着虽然您可能具有Library.dll.config文件,但配置系统永远不会捡起它。

您应该将库的配置设置合并到应用程序配置文件中。 .NET框架不支持库的配置文件。

更好的是,重新设计您的库,以便它不依赖于配置文件,而是使用Imperative Configuration

+0

谢谢,我会检查你的帖子。 一个配置文件让我无法使用强类型类访问库中的设置。 – 2009-09-09 12:23:30

+0

@Vasi:正如我上面提到的,并且Pop Catalin在他的回答中演示,您可以将您的库设置合并到应用程序配置文件中。 – 2009-09-09 12:31:02

相关问题