我正在.NET 4.0中创建一个Windows服务,并通过引用服务项目来测试窗体客户机的某些功能。如何使用configurationManager从.Net 4.0的App.config中读取值?
服务项目有一个App.config文件和文件看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<clear />
<add name="myLocalMySQLDBUsername" connectionString="username"/>
</connectionStrings>
</configuration>
当属于该服务的函数调用:
- ConfigurationManager.ConnectionStrings( “myLocalMySQLDBUsername”) .ConnectionString
由于我的连接字符串未加载,所以引发空引用错误。加载的唯一connectionStrings来自位于c:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config中的machine.config文件
如果我为服务创建应用程序作用域设置,我可以通过使用My.Settings.setting - >来获得该设置,所以它不像App.config文件没有被读取。
我的问题是:为什么我的connectionStrings没有从App.config文件加载?
谢谢你的帮助。
UPDATE:
而且,在这一点上,甚至周围的工作,将不胜感激;使用app.config的唯一原因是能够使用DpapiProtectedConfigurationProvider加密内容(内容将具有用于服务和数据库连接的一些用户名/密码值)。
我试着在app.config中手动创建一个AppSettings部分,但这些设置也没有被配置管理器(count = 0)读取。
更新2:
每一个建议,我试图手动打开app.config文件像这样:
Dim exePath As String = System.IO.Path.Combine(Environment.CurrentDirectory, "ServiceName.exe")
Dim myConfig As Configuration = ConfigurationManager.OpenExeConfiguration(exePath)
因此,这里是怪异的一部分,当我进去看看,路径是正确的(指向我的app.config),但connectionStrings仍然从machine.config文件加载(我的connectionStrings不加载)!哎呀
更新3:
好了,所以,我想它了。从另一个项目(子项)引用项目(父项)时,即使正在使用父项的类,也会使用子项的app.config。因此,如果我将它们复制到孩子的app.config中,我可以获取connectionStrings。当试图手动打开它的时候,我的currentDirectory是孩子的,而不是父母(奇怪的是它没有抛出异常 - 它不能找到配置文件......它只是默默地使用machine.config ... 好吧)。
谢谢大家的帮助!
可能是一个愚蠢的问题,但你如何部署服务和它的app.config?你在正确的目录下有servicename.exe.config吗? – 2011-04-10 01:13:34
我还没有部署它......所有仍在我的本地机器上进行调试。当我部署它时,我将确定配置文件在System32文件夹(我认为)或Windows服务默认查找文件的任何文件夹中结束。 – Dima 2011-04-10 01:24:44
变通后发布。 – Hogan 2011-04-10 02:21:25