2013-06-05 40 views
0

我寫了一個自定義構建任務,它讀取App.config文件中的appsettings的值。當我將我的任務編譯爲可執行文件並運行它時,該任務完美無缺。從配置文件讀取正確的值。然而,當我編譯它作爲一個程序集並從我的構建腳本中的目標運行它時,我得到一個System.NullReferenceException。 foreach循環中發生異常,因爲配置管理器返回null。自定義MSBuild任務不從App.config中讀取[C#]

IEnumerable<string> tables = ConfigurationManager.AppSettings.GetValues(key); 
foreach (string txt in tables) 
{ 
     Logic..... 
} 

我正確地調用了自定義任務,因爲我評論了問題併成功構建。

有誰知道爲什麼會發生這種情況?或者如果我甚至能夠使用自定義生成任務的App.config文件?

在此先感謝

回答

1

如果您編譯項目作爲一個庫,那麼它調用可執行文件的讀取的app.config。如果您將項目編譯爲可執行文件,那麼它會從它自己的app.config中讀取。

+0

尼克,感謝您的答覆。它指出我在正確的方向,所以我將它標記爲正確的答案。爲了解決我的問題,我創建了一個單獨的配置文件,我將其映射到配置管理器。 – Dan

1

如果有人有興趣我用下面的代碼訪問自定義配置

private static string[] GetConfigFile() 
    { 
     var map = new ExeConfigurationFileMap(); 
     map.ExeConfigFilename = @"C:\ConfigFile.config"; 
     config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 

     return config.AppSettings.Settings.AllKeys; 
    } 

上面的代碼從指定配置文件密鑰列表。 返回值存儲在一個字符串數組,我通過使用foreach循環運行所看到如下

string[] keyNames = GetConfigFile(); 
foreach (string keys in keyNames) 
     { 
      KeyValueConfigurationElement keyval = config.AppSettings.Settings[keys]; 
      Console.WriteLine(keyval.Value); 
     } 
相關問題