我编写了一个自定义构建任务,从它的App.config文件中的appsettings读取值。当我将任务编译为可执行文件并运行它时,任务可以完美地工作。从配置文件中读取正确的值。但是,当我将其编译为程序集并在构建脚本中从目标运行它时,我会得到System.NullReferenceException。异常发生在foreach循环中,因为配置管理器返回null。
IEnumerable<string> tables = ConfigurationManager.AppSettings.GetValues(key);
foreach (string txt in tables)
{
Logic.....
}
我正确地调用了自定义任务,因为我注释了这个问题,它成功地构建了。
有人知道为什么会发生这种情况吗?或者如果我甚至能够使用自定义构建任务的App.config文件?
Thanks in advance
如果您将项目编译为库,则它将从调用可执行文件的app.config中读取。如果你把一个项目编译为可执行文件,那么它会从它自己的app.config中读取。
如果有人感兴趣,我使用以下代码访问自定义配置
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);
}