[C#.NET] 使用Class Library如何取得App.config

  • 15594
  • 0
  • 2012-09-07

摘要:[C#.NET] 使用Class Library如何取得App.config

問題: 

最近遇到一個問題,在Class Library的專案裡想要用App.config來存放設定值,使用ConfigurationManager後怎麼抓值都是出現null的問題,使用關鍵字 [Class Library + Appsetting] 搜尋後很快就有了解決方案。

說明:

在這裡我設定了兩個專案,一個Class Library專案和一個Console的專案,程式會從Console專案進去然後呼叫Class Library專案裡的方法。

 

接下來看一下我們App.config的內容:

取得App.config值的方法就寫在Class1裡的GetAppSetting方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.IO;

namespace ClassLibrary1
{
    public class Class1
    {
        public string GetAppSetting(string key)
        {
            string result = string.Empty;
            var uri = new Uri(Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase));
            var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = Path.Combine(uri.LocalPath, Assembly.GetExecutingAssembly().FullName.Split(',')[0] + ".dll.config") };
            var assemblyConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
            if (assemblyConfig.HasFile)
            {
                AppSettingsSection section = (assemblyConfig.GetSection("appSettings") as AppSettingsSection);
                result = section.Settings[settingName].Value;
            }

            return result;
} } }

最後我們在從Console專案這邊去呼叫Class Library裡的方法就可以了:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ClassLibrary1;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 class1 = new Class1();
            class1.GetAppSetting("key1");
        }
    }
}

需要注意的地方有:

  1. 所需使用的App.config檔案名稱必須自己先訂好,在文章裡我使用的檔案名稱是ClassLibrary1.dll.config
  2. ClassLibrary1.dll.config需要放在起始專案也就是Console專案的DLL資料夾底下,例:\Visual Studio 2010\Projects\ClassLibrary1\ConsoleApplication1\bin\Debug\ClassLibrary1.dll.config
  3. 在打開組態設定檔時(ClassLibrary1.dll.config),要記得先檢查檔案是否存在防呆