簡體   English   中英

無法從DLL讀取App.config

[英]Unable to read App.config from DLL

我已經將包含一些AppSettings的App.config文件從相同解決方案的EXE項目移到DLL項目中。 之后,我注意到使用配置管理器時,我僅獲得空值。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
    <add key="Path1" value="C:\ProgramData\Resources\file2.xml" />
    <add key="Path2" value="C:\ProgramData\Development\file1.xml" />
</appSettings>
</configuration>

/* Reading */
public string Path1=> ConfigurationManager.AppSettings["Path1"];
public string Path2=> ConfigurationManager.AppSettings["Path2"];

如果將App.config移回EXE項目,則可以使用配置管理器正確讀取所有值。

所以,我的問題是,如果我的解決方案中只有DLL(COM)項目,而我對EXE(由第三方開發)項目沒有控制權,那么如何使用App.config文件管理設置?

配置文件不會被編譯到dll中。

該應用程序將使用您解決方案的啟動項目中的app.config,除非您輸入特殊代碼以查找其他地方。

這是設計使然,您無需更改設置即可更改配置而不必重新編譯。

您不應將app.config用於類庫中的任何設置。 這樣做是不好的做法,這就是即使Microsoft也不在類庫中提供app.config的原因。

類庫所需的任何值都應使用參數從應用程序傳遞給類。 例如,在您的情況下,文件路徑可以作為參數傳遞給類方法或構造函數等。

但是,如果您仍然想訪問,請嘗試此選項
1.將對System.Configuration.dll的引用添加到您的類庫中,並在using塊中使用System.Configuration進行添加
2.編寫代碼以將app.config文件讀取為常規xml文件。 有點像這樣。

   string getFilePath()
   {
    string path = Path.GetDirectoryName(Assembly.GetCallingAssembly().CodeBase) + @"\ClassLibrary.dll.config";

    XDocument doc = XDocument.Load(path);

    var query = doc.Descendants("appSettings").Nodes().Cast<XElement>().Where(x => x.Attribute("key").Value.ToString() == key).FirstOrDefault();

    if (query != null)
    {
        return query.Attribute("value").Value.ToString();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM