我正在尝试完成这个异常处理程序:
if (ConfigurationManager.ConnectionStrings["ConnectionString"]==null)
{
string pathOfActiveConfigFile = ...?
throw new ConfigurationErrorsException(
"You either forgot to set the connection string, or " +
"you're using a unit test framework that looks for "+
"the config file in strange places, update this file : "
+ pathOfActiveConfigFile);
}
这个问题似乎只发生在我使用nUnit时。
8条答案
按热度按时间gupuwyp21#
对于.Net Framework,请尝试以下操作
对于.Net核心或任何更新的内容,请参阅其他答案。
bybem2ql2#
严格地说,没有单一的配置文件。不包括ASP.NET1,可以有三个使用内置(
System.Configuration
)支持的配置文件。除了机器配置之外:app.exe.config
、用户漫游和用户本地。获取“全局”配置(exe.config):
对每次使用的漫游和非漫游配置文件使用不同的
ConfigurationUserLevel
值。1它有一个完全不同的模型,其中子文件夹(IIS虚拟或文件系统)
web.config
的内容可以(取决于设置)添加到或覆盖父文件夹的web.config
。ukqbszuj3#
如果你的意思是当你使用NUnit时你只得到一个null返回,那么你可能需要将你的应用程序的app.config中的ConnectionString值复制到你的测试库的app.config中。
当它由测试加载器运行时,测试程序集在运行时加载,并将在其自己的app.config(在编译时重命名为testAssembly.dll.config)中查找,而不是在应用程序配置文件中查找。
若要获取正在运行的程序集的位置,请尝试
mv1qrgav4#
确保您单击文件上的属性并将其设置为“始终复制”,否则它将不会与您的快乐lil dll一起位于xml\f2\文件夹中,以便配置它需要的位置并添加更多的cowbell
m2xkgtsf5#
当我第一次意识到单元测试项目引用了该项目中的app.config而不是与我的生产代码项目(当然,DOH)相关联的app.config时,我只是在Prod项目的Post Build Event中添加了一行,它将把app.config复制到测试项目的bin文件夹中。
问题解决了
到目前为止,我还没有注意到任何奇怪的副作用,但我不确定这是正确的解决方案,但至少它似乎有效。
fnatzsnv6#
我看到的另一个选项在这里丢失了:
hgc7kmma7#
根据您的配置文件的位置,
System.Reflection.Assembly.GetExecutingAssembly().Location
可能会满足您的需要。ozxc1zmp8#
我在一个Web应用程序(实际上是一个本地运行的Azure Web角色)中尝试了之前的一个答案,但它并不起作用。然而,这种类似的方法确实奏效了:
配置文件原来位于C:\Program Files\IIS Express\MyScript.dll. exe中。有趣的地方。