2014-12-04 85 views
0

它的一個Windows服務,我可以從app.config讀取appkeys,但無法讀取在相同路徑上的外部appSettings文件。下面是我的app.config:無法從外部appSettings文件讀取密鑰?

<appSettings file="Scheduler.dev.AppSettings.config"> 
    <add key="ErrorEmailTo" value="[email protected]" /> 
    </appSettings> 

我的外部appSetting文件如下:

<appSettings> 
    <add key="ErrorEmailFrom" value="[email protected]" /> 
    <add key="ErrorEmailhost" value="smtp.ddd.local" /> 
    <add key="ErrorEmailPort" value="25" /> 
    <add key="ErrorEmailEnableSsl" value="true" /> 
    <add key="ErrorEmailUserName" value="[email protected]" /> 
    <add key="ErrorEmailPassword" value="password" /> 
</appSettings> 

下面是我的代碼讀取鍵:

protected override void GetDetails() 
    { 
     try 
     { 

      var ErrorEmailTo = ConfigurationManager.AppSettings["ErrorEmailTo"]; 
      var ErrorEmailFrom = ConfigurationManager.AppSettings["ErrorEmailFrom"]; 
      var ErrorEmailhost = ConfigurationManager.AppSettings["ErrorEmailhost"]; 
      var ErrorEmailPort = ConfigurationManager.AppSettings["ErrorEmailPort"]; 
      var ErrorEmailEnableSsl = ConfigurationManager.AppSettings["ErrorEmailEnableSsl"]; 
      var ErrorEmailUserName = ConfigurationManager.AppSettings["ErrorEmailUserName"]; 
      var ErrorEmailPassword = ConfigurationManager.AppSettings["ErrorEmailPassword"];   

      } 

     } 
     catch (Exception ex) 
     {    
      throw ex; 
     } 

    } 

我可以代碼讀取來自app.config的第一個密鑰,但其他人保持爲空。即使我將我的密鑰移動到app.config我可以使用上面的代碼讀取所有密鑰。

我曾嘗試是:

  • 檢查名稱,路徑
  • 刪除所有臨時/ Bin文件都試過了,但沒有運氣。

請幫忙。

+1

可能重複(http://stackoverflow.com/questions/18832307/external-appsettings-file-not-merging-with-web-config) – CodingWithSpike 2014-12-04 22:32:07

+0

@CodingWithSpike細節不同,建議帖子沒有接受的答案。我試過suggetions,但他們不工作。 – user576510 2014-12-04 22:39:16

+1

「Scheduler.dev.AppSettings.config」文件包含在構建中,不是嗎? – barrick 2014-12-04 22:57:42

回答

0

問題是app.config的讀取方式與其他XML文件不同。這包括運行時本身的一些處理,例如能夠強制.NET版本或在Mono中重定向DLLImport。

如果您希望能夠閱讀這些元素,請嘗試使用System.Linq.XML將它們轉換爲字典,而不是依賴運行時來轉換它們。

using System.Linq.XML; 

... 
public static Dictionary<string, string> ConfigValues 
    = XDocument.Load(configFilePath) 
     .Root 
     .Elements() 
     .Where(e => e.Name == "add") 
     .ToDictionary(
      e => e.Attributes().FirstOrDefault(a => a.Name == "key").Value.ToString(), 
      e => e.Attributes().FirstOrDefault(a => a.Name == "value").Value.ToString()); 
的[外部的AppSettings文件不是用的web.config合併]
+0

謝謝,但是相同的代碼文件和實現在Web項目中工作正常。 – user576510 2014-12-04 22:48:05