2009-09-09 66 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

相關問題