【发布时间】:2018-11-12 18:01:04
【问题描述】:
我编写了一个窗口服务,它从 xml 文件中获取输入。该文件位于 .exe 本身的文件夹中。但我希望该窗口服务从 App.config 中获取输入。 我读到应用配置名称被更改为 service.exe.config 并且每个地方都提到了我们如何从中访问连接字符串。有人可以告诉我一种从窗口服务中的应用配置获取应用设置的方法。
我用谷歌搜索了很多,但可以做到。 当前代码是:
protected override void OnStart(string[] args)
{
current_directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
XmlDocument xml = new XmlDocument();
try
{
string Xml_Path = System.AppDomain.CurrentDomain.BaseDirectory;
xml.Load(current_directory + "\\Data.xml");//suppose that myXmlString contains "<Names>...</Names>"
XmlNodeList xnList = xml.SelectNodes("/Names/Name");
foreach (XmlNode xn in xnList)
{
strDir = xn["Directory"].InnerText;
fileMask = xn["FileMask"].InnerText;
strBatfile = xn["Batch"].InnerText;
strlog = xn["Log"].InnerText;
}
//strDir = ConfigurationManager.AppSettings["Directory"];
//fileMask = ConfigurationManager.AppSettings["FileMask"];
//strBatfile = ConfigurationManager.AppSettings["Batch"];
//strlog = ConfigurationManager.AppSettings["Log"];
m_Watcher = new FileSystemWatcher();
m_Watcher.Filter = fileMask;
m_Watcher.Path = strDir + "\\";
m_Watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
m_Watcher.Created += new FileSystemEventHandler(OnCreated);
m_Watcher.Deleted += new FileSystemEventHandler(OnDeleated);
m_Watcher.Renamed += new RenamedEventHandler(OnRenamed);
m_Watcher.EnableRaisingEvents = true;
}
catch (Exception exception)
{
CustomException.Write(CustomException.CreateExceptionString(exception.ToString()));
}
}
但是类似的东西。
//strDir = ConfigurationManager.AppSettings["Directory"];
//fileMask = ConfigurationManager.AppSettings["FileMask"];
//strBatfile = ConfigurationManager.AppSettings["Batch"];
//strlog = ConfigurationManager.AppSettings["Log"];
不工作..而且在发布模式下 xml 不可用。
有人可以让我访问应用配置以将输入参数传递给 Window 服务。
【问题讨论】:
-
您能解释一下为什么使用
ConfigurationManager.AppSettings不起作用吗?这将是使用本地配置文件的常用方法 -
它只是没有从 app.config 中读取。在发布模式下,app 配置变成了 program.exe.config,我相信这就是问题所在。但我不确定,只是试着让它工作
-
为了使
ConfigurationManager开箱即用,配置文件名需要与附加了.config的exe 名称匹配,根据@dotnetstep 的回答 -
谢谢先生。它成功了