装配的 App.Config 被忽略;改为读取 Machine.config

Posted

技术标签:

【中文标题】装配的 App.Config 被忽略;改为读取 Machine.config【英文标题】:Assembly's App.Config is being ignored; Machine.config being read instead 【发布时间】:2010-10-12 02:46:52 【问题描述】:

在针对我的 DAL 运行我的 VS2008 unit 集成测试时,我发现程序集正在读取 machine.config 而不是程序集的 app.config

这是调用堆栈的概要:

单元测试项目具有调用 DataLayer 项目的方法 MyDataLayer 类继承自基类。方法被称为GetStuff() 基类使用System.Configuration。一切顺利。 在代码中调用此属性:ConfigurationManager.ConnectionStrings["MyConnStr"] 实际上返回 null,因为它显然没有找到。 检查MyDataLayer 类,是的,MyConnStr 在那里。 检查集合ConnectionStrings,是的,它有一个连接字符串。这是在C:\Windows\Microsoft.NET\Framework\v2.0.50727\Config\machine.config 结束的 machine.config 中的那个 我不确定为什么我的 DAL 的 app.configmachine.config 取代

感谢任何帮助!

【问题讨论】:

【参考方案1】:

不确定这是否适用于您,但您需要确保配置字符串在您的单元测试项目的 app.config 中,而不是在您的 DataLayer 项目中。

【讨论】:

雷,你是个怪物!我所要做的就是参考 System.Configuration 并将 DataLayer 项目中的 App.Config 复制/共享到我的 UnitTest 项目中,它就可以工作了。太棒了!【参考方案2】:

这可能对处理Settings.settingsApp.config 的一些人有所帮助:

在 Visual Studio(在我的例子中是 VS2008)中编辑 Settings.settings 网格中的任何值(行)时,请注意“属性”窗格中的 GenerateDefaultValueInCode 属性。

如果将GenerateDefaultValueInCode设置为True(这里默认为True!),默认值编译成exe(或dll),在纯文本编辑器中打开时可以发现它嵌入在文件中.

我正在开发一个控制台应用程序,如果我在 exe 中有默认设置,应用程序总是会忽略放置在同一目录中的配置文件!

真是一场噩梦,整个互联网上都没有这方面的信息。

【讨论】:

以上是关于装配的 App.Config 被忽略;改为读取 Machine.config的主要内容,如果未能解决你的问题,请参考以下文章

预构建事件后忽略 App.Config

vstest.console.exe 忽略 app.config

自定义 FieldSetMapper 中忽略的自动装配 JpaRepository 保存

加载了错误的 App.config

Laravel 工匠忽略了我的 app/config/database.php

毕设扫描器参数Fuzz数据的定义读取和装配(爬虫数据和Payload数据)