C# 无法从App.config检索值

C# 无法从App.config检索值,c#,unit-testing,integration-testing,app-config,configurationmanager,C#,Unit Testing,Integration Testing,App Config,Configurationmanager,我已经设置了一个测试项目,就像我通常使用项目根目录中的App.config文件一样。然后,我为不同类型的测试设置文件夹,例如ServiceTests等 我在该文件夹的一个文件中找到了我的第一组测试,并试图引用App.config中的appSettings部分,但没有得到任何回复。我尝试了以下方法: var setting = ConfigurationManager.AppSettings["MySetting"]; 更广泛地说: var settings = ConfigurationMan

我已经设置了一个测试项目,就像我通常使用项目根目录中的App.config文件一样。然后,我为不同类型的测试设置文件夹,例如ServiceTests等

我在该文件夹的一个文件中找到了我的第一组测试,并试图引用App.config中的appSettings部分,但没有得到任何回复。我尝试了以下方法:

var setting = ConfigurationManager.AppSettings["MySetting"];
更广泛地说:

var settings = ConfigurationManager.GetSection("appSettings") as AppSettingsSection;

在这两种情况下,我都返回null。有人有什么建议吗?

我找到了你的答案

“如果您正在进行单元测试,则需要单元测试项目中的APP.CONFIG副本”


同样值得注意的是,有人就这个问题提出了建议,因此您不需要复制实际的配置文件:

configuration manager不读取DLL的app.config,只读取正在运行的可执行文件(在本例中,是测试运行程序)。因此,未找到/使用测试程序集的app.config

您必须手动查找并加载XML,然后自己解析它


或者,为了更便于单元测试,将系统配置隐藏在您自己的界面/服务后面,使用主应用程序中的app.config设置,并在单元测试中使用特定于测试的设置对其进行模拟。

您是否已将生成操作设置为该文件

应将其设置为“无”,并复制到输出目录


另外,在输出文件夹中,您是否有一个名为.dll.config的文件?

您应该模拟配置设置,您不应该需要app.config作为单元tests@EhsanSajjad-这些是基本的集成测试,所以需要像端点这样的东西来点击。谢谢你的回答,但是这个App.config在我的测试项目中。那么你是说应该找到我的App.config,但出于某种原因没有找到?正如我在问题中所说的,我经常这样设置我的测试项目,我只需在测试项目中创建一个app.config文件,并将相关设置放入其中,以便从主项目的web.config运行测试。我想知道的是为什么这个现在似乎不起作用。所以它是一个网络项目?那可能不一样,我对他们不太熟悉。一般来说,尽管单元测试项目只构建了一个DLL,而且配置框架从来都不支持读取DLL的app.config。在构建时,可执行文件的app.config被转换为“myapp.exe.config”,这就是所使用的。网络应用可能会有不同的做法。就我个人而言,我在测试项目中不使用app.config,我模拟配置服务并通过另一种机制提供测试配置。当你说你通过“另一种机制”提供测试配置时,你是什么意思?我问的原因是,我在测试中模拟我的IApplicationSettings接口。然后,我只是尝试通过从测试项目的app.config中提取字符串(端点URL)来设置对象的元素。我可以在测试设置中设置它们,但我只是想知道为什么这不起作用。我会这样做,模拟它,并在测试中替换。我可能只是将测试端点烘焙到测试中,这样可以使事情变得简单。至于为什么它不起作用,我想知道它以前为什么起作用。我不希望从测试中读取app.config,正如我所说的,app.config机制不适用于仅适用于DLL的可执行文件。如果在app.config中为test runner exe设置了设置,则可以读取这些设置。但是对于一个测试项目,app.config不知道它是如何工作的。你可以找到测试的当前工作目录(具体工作目录取决于你使用的测试框架),在那里查找app.config或你自己制作的其他配置文件,然后加载它并拉出配置,如果你想将其保留在配置文件中的话。我喜欢将数据文件捆绑为嵌入式资源,并在安装时将其解压缩到磁盘或内存中,以避免与数据位置相关的问题。它已经有了这些设置。如果文件位于同一个项目中,这些因素将如何影响访问该文件?