如何在.net 4.0中使用configurationManager从App.config中读取值

本文关键字:configurationManager App config 读取 net | 更新日期: 2023-09-27 17:49:40

我正在用。net 4.0创建一个windows服务,并通过引用该服务项目在windows窗体客户端上测试该服务的一些功能。

服务项目有一个App.config文件,该文件看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
  <configuration>
     <connectionStrings>
       <clear />
       <add name="myLocalMySQLDBUsername" connectionString="username"/>
     </connectionStrings>
  </configuration>

当属于服务的函数调用时:

  • ConfigurationManager.ConnectionStrings("myLocalMySQLDBUsername")。ConnectionString

抛出空引用错误,因为我的连接字符串没有加载。唯一加载的connectionstring来自机器。' windows 'Microsoft.NET'Framework'v4.0.30319' config 'machine.config

如果我为服务创建一个应用程序范围设置,我可以通过使用My.Settings.setting ->来获得该设置,这样就不会像App.config文件不被读取一样。

我的问题是:为什么我的connectionStrings没有从App.config文件加载?

谢谢你的帮助。

更新:

同样,在这一点上,即使是一个解决方案也会受到赞赏;使用app.config的唯一原因是能够使用DpapiProtectedConfigurationProvider加密内容(内容将为服务和数据库连接提供一些用户名/密码值)。

我尝试在app.config中手动创建一个AppSettings部分,但这些设置也没有被configurationManager读取(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仍然从机器加载。配置文件(我的connectionStrings没有加载)!!啊

更新3:

好吧,我明白了。当从另一个项目(子项目)引用一个项目(父项目)时,即使使用了父项目(子项目)的类,也会使用子项目的app.config。因此,如果我将connectionStrings复制到子应用程序的app.config中,我就可以让它们显示出来。当尝试手动打开它时,我的currentDirectory是子目录,而不是父目录(奇怪的是它没有抛出异常-它无法找到配置文件…它只是默默地使用机器。配置…哦)。

谢谢大家的帮助!

如何在.net 4.0中使用configurationManager从App.config中读取值

您要做的第一件事是确保服务帐户能够访问该文件(如果不是作为SYSTEM运行的话)。听起来应该没问题,不过既然你提到了My.Settings.Setting works。

另一件要注意的事情是确保app.config中有服务可执行文件的名称-所以如果服务exe是MyService.exe, app.config必须命名为MyService.exe.config。

最后要注意的是:库将从加载库的可执行文件的app.config中读取,而不是从库中读取app.config。因此,如果您有一个服务可执行程序MyService的项目和一个库MyServiceLibrary的项目,库中的代码将从MyService而不是MyServiceLibrary读取app.config。

我看到一些人说这个问题可以通过手动重新添加System.Configuration.dll的引用来修复

旁注:如果这真的是你的整个app.config文件,而不仅仅是一个片段,那么这是你的问题…你的app.config文件应该更复杂,否则。net将无法加载它。

解决方法:使用配置管理器打开这个配置文件(有一个API)。你不能让它自动加载,只是告诉配置管理器打开它。

我仍然认为问题是你的配置文件无效-你能发布完整的文件吗?

确保将配置文件部署到与可执行文件相同的文件夹中,并将其命名为your.assembly.exe.config.

我也遇到过类似的问题,但在我的情况下,这是因为我更改了项目的名称空间。这也用作配置文件中的应用程序设置节元素名称,因此代码没有找到新的节名称。在项目属性和重建中摆弄一个自定义设置的值,导致新部分与旧部分一起写入app.config,这就是向我指出问题的原因。

相关文章:
  • 没有找到相关文章