0

我编写了一个自定义构建任务,它从 App.config 文件中的 appsettings 中读取值。当我将我的任务编译为可执行文件并运行它时,该任务可以完美运行。从配置文件中读取正确的值。但是,当我将它编译为程序集并从构建脚本中的目标运行它时,我得到一个 System.NullReferenceException。由于配置管理器返回 null,所以在 foreach 循环中发生异常。

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

我正确地调用了自定义任务,因为我注释掉了这个问题并且它成功构建了。

有谁知道为什么会发生这种情况?或者我什至可以使用带有自定义构建任务的 App.config 文件?

提前致谢

4

2 回答 2

1

如果将项目编译为库,则它会从调用可执行文件的 app.config 中读取。如果您将项目编译为可执行文件,那么它会从它自己的 app.config 中读取。

于 2013-06-05T23:24:06.770 回答
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);
        }
于 2013-06-06T21:02:37.257 回答