它是一个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
,我也可以使用上面的代码读取所有密钥。
我试过的是:
请帮忙。
答案 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)