Roslyn中的ConfigurationManager.AppSettings返回一个空字符串

时间:2017-11-16 02:14:43

标签: c# windows roslyn scriptcs

我完全清楚这个问题已被多次询问,但我已经搜索过互联网并且还没有找到解决方案。

我使用scriptcs运行以下.csx文件(只是为了测试并确保ConfigurationManager正常工作):

#load "C:\Tickets\LoadConfig.csx"

using System;
using System.Configuration;
Console.WriteLine(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
Console.WriteLine(ConfigurationManager.AppSettings.AllKeys);

这是LoadConfig.csx,我发现它在here SO帖子上,多个人说他们有很好的结果。

#r "System.Configuration"

using System;
using System.IO;
using System.Linq;

var paths = new[] { Path.Combine(Environment.CurrentDirectory, "web.config"), Path.Combine(Environment.CurrentDirectory, "app.config") };
var configPath = paths.FirstOrDefault(p => File.Exists(p));

if (configPath != null)
{
    AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configPath);

    var t = typeof(System.Configuration.ConfigurationManager);
    var f = t.GetField("s_initState", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
    f.SetValue(null, 0);

    Console.Write(configPath); // Here to make sure it found the app.config file properly
}

这里也是app.config:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>
    <appSettings>
        <add key="testKey" value="testValue" />
    </appSettings>
</configuration>

但是,当我运行第一个代码块时,它告诉我当前配置文件是app.config,并且AllKeys属性是System.String[]。我确保所有文件都在同一个文件夹中,并且app.config也正确写入。我现在只是卡住了,不确定是否还有其他解决方案,或者我是否完全忽视了某些问题。如果有人有任何建议,我们非常感谢,谢谢。

1 个答案:

答案 0 :(得分:0)

这是因为您直接打印ConfigurationManager.AppSettings.AllKeys,这不是字符串,因此它只打印对象类型。

您需要使用

之类的东西迭代键
var keys = ConfigurationManager.AppSettings.AllKeys;
foreach (var key in keys)
{
    Console.WriteLine(key);
}
Console.ReadLine();

ConfigurationManager.AppSettings.AllKeys.ToList().ForEach(k => Console.WriteLine(k));

输出:

  

密押