摘要:[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");
}
}
}
需要注意的地方有:
- 所需使用的App.config檔案名稱必須自己先訂好,在文章裡我使用的檔案名稱是ClassLibrary1.dll.config
- ClassLibrary1.dll.config需要放在起始專案也就是Console專案的DLL資料夾底下,例:\Visual Studio 2010\Projects\ClassLibrary1\ConsoleApplication1\bin\Debug\ClassLibrary1.dll.config
- 在打開組態設定檔時(ClassLibrary1.dll.config),要記得先檢查檔案是否存在防呆