无法从外部appSettings文件中读取密钥?

时间:2014-12-04 22:25:11

标签: c# .net

它是一个Windows服务,我可以从appkeys读取app.config,但无法读取同一路径上的extnernal appSettings文件。下面是我的app.config:

  <appSettings file="Scheduler.dev.AppSettings.config">
    <add key="ErrorEmailTo" value="xxx@domain.com" />
  </appSettings>

我的外部appSetting文件如下:

<appSettings>  
  <add key="ErrorEmailFrom" value="test@xxxxxx.com" />
  <add key="ErrorEmailhost" value="smtp.ddd.local" />
  <add key="ErrorEmailPort" value="25" />
  <add key="ErrorEmailEnableSsl" value="true" />
  <add key="ErrorEmailUserName" value="test.user@xxxxxxxx.com" />
  <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,我也可以使用上面的代码读取所有密钥。

我试过的是:

  • 选中姓名,路径
  • 删除了所有的temp / bin文件,但没有运气。

请帮忙。

2 个答案:

答案 0 :(得分:0)

问题是app.config的读取方式与其他XML文件的读取方式不同。这包括运行时本身的一些处理,例如能够在Mono中强制执行.NET版本或重定向DLLImports。

如果您希望能够阅读这些元素,请尝试使用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());

答案 1 :(得分:0)

@barrick所说的话为我解决了这个问题,再加上一步

  • 在Visual Studio解决方案资源管理器中,右键单击您要使用的外部配置文件->单击“包含在项目中”(啊,对不起,我是Visual Studio的新手,花了我一些时间来找到它)

  • 右键单击相同的配置文件->下拉菜单中的“属性”->解决方案资源管理器下方的“属性”窗口中的->“高级”->“复制到输出目录”->单击“不复制”向下->更改为“如果更新则复制”,或者某些帖子说“总是复制”也可以工作

enter image description here