我正在VS2010中构建一个ASP.NET应用程序。我有许多单独的程序集(类库)和相应的Test项目。
在其中一个类库中,我使用App.config文件来存储设置。程序集本身使用以下代码来检索设置:
string tmp = ConfigurationManager.AppSettings["mySetting"];
问题在于,当我尝试在单独的测试项目中创建单元测试时,测试不会获取App.config文件中的设置。如果我将App.config文件复制到Test项目中,它就可以工作。
如何确保每个程序集都使用自己的App.config文件副本。如果我不得不复制配置文件,它会引入问题。还有一个问题,因为可能有多个配置文件,每个程序集一个 - 无论如何它们如何在一个测试项目中共存?
谢谢!
答案 0 :(得分:53)
好吧,如果您需要在多个项目中共享 App.config 文件,我只需在每个项目中“添加为链接”原始 App.config 文件。
假设您使用原始 App.config ProjectA 。然后你有 ProjectATest1 和 ProjectATest2 。在每个 TestX 项目中:
它将在每个 TestX 项目中创建 App.config 快捷方式。如果你改变它,它会随处变化。
希望这有帮助。
答案 1 :(得分:6)
首先,如果您正在进行单元测试,那么您可能希望看一下模拟配置,而不是阅读它。
如果你真的想让配置可用(我以前为集成测试做过),那么你可以为你的程序集添加一个构建后的步骤(我假设1-1的程序集映射测试组件。
构建后步骤(在测试程序集上)看起来像这样:
copy /y "<path to your assembly under test>.dll.config" "$(TargetDir)\$(TargetName).dll.config"
基本上,您正在复制已由visual studio为您正在测试的程序集重命名的app.config,以匹配测试程序集的预期配置名称。
答案 2 :(得分:3)
不应该有程序集的配置文件。如果这样做,每个应用程序最终将为每个dll / reference项目提供一个配置文件。
程序集从加载它们的应用程序(Windows / Web)上下文中获取配置值。
因此,如果您有WebApp,程序集将使用WebApp的web.config文件来读取配置值。同样,如果您有Windows应用程序/单元测试应用程序,库应该从app.config中读取值。
请阅读此相关问题 - C#.NET Compiling the settings.settings file from various projects in a solution into 1 config file