C# MSTest失败:未能找到配置节';log4net';在应用程序中';配置文件

C# MSTest失败:未能找到配置节';log4net';在应用程序中';配置文件,c#,unit-testing,log4net,mstest,C#,Unit Testing,Log4net,Mstest,这是我的设置: / solution.sln Core/ Core.csproj web/ web.csproj Web.config Test/ Test.csproj App.config build/ _PublishedWebsites/web/etc... test.dll test.dll.config Core.dll log4net.dll 我在Test项目中编写了单元测试,测试Core项目的功能。

这是我的设置:

/
solution.sln
Core/
    Core.csproj
web/
    web.csproj
    Web.config
Test/
    Test.csproj
    App.config
build/
    _PublishedWebsites/web/etc...
    test.dll
    test.dll.config
    Core.dll
    log4net.dll
我在
Test
项目中编写了单元测试,测试
Core
项目的功能。所有项目都使用log4net,所有项目都是使用相应的
App.config
Web.config
文件配置的

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
在他们的
AssemblyInfo.cs

使用NAnt将项目构建到
build
目录中

当我从VisualStudio(2010 Professional)运行单元测试时,一切正常

但是当我试图直接执行MSTest时

MSTest.exe /resultsfile:TestResults.trx /noisolation /testcontainer:build\test.dll
所有测试用例都失败,并出现以下错误:

log4net:ERROR Failed to find configuration section 'log4net' in the application's .config file
这让我很困惑,因为
test.dll.config
文件肯定包含
log4net
配置部分

MSTest创建的文件夹也包含配置文件:

/flopes_MyMachine 2015-10-08 08_48_59/Out/
    Core.dll
    test.dll
    test.dll.config
    log4net.dll
在我看来,可能是
MSTest
使用了错误的配置文件,或者找不到
test.dll的配置文件?这有意义吗?有没有办法告诉MSTest使用哪个配置文件

我做了一个小测试输出,以查看加载了什么配置文件,它增加了更多的神秘性,因为加载的配置文件显然是:

D:\Programme\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe.Config

这怎么可能?为什么MSTest不只是加载就在
test.dll
旁边的配置文件?这有什么意义?

我想看看这个问题和答案:

它指出您应该创建一个测试运行配置,其中包括.config作为部署项

还要检查所使用的配置是否正确;查找活动配置文件的方法:

// Get the user-config:
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath

// Simple approach
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile? Is it the correct .config
通过使用@florianpeschka检查几件事情,我们认为问题在于
noisolation
-标志。这有点奇怪,因为noisolation基本上控制着为测试实例创建单独的沙盒,但是可能需要创建单独的进程来为ms测试使用“动态”和非硬编码配置


因此,简而言之,不要使用
noisolation
-标志,一切正常。

这似乎无法解决根本问题。
config
文件已正确部署到
TestResults/Out/
文件夹中,请参阅我的问题。文件就在那里,只是MSTest不知何故没有找到它…什么是
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
?它是正确的
.config
-文件吗?我应该如何找到它?我可以调试到MSTestExecution中吗?也许可以删除log4net(使其运行)并将变量写入文件?这很有趣。。。我已将输出添加到问题中。如果从生成文件夹中运行mstest,输出是否会更改?(即工作目录不同)@flindeberg Nop,无论工作目录是什么,都会加载相同的配置文件。您是否可以创建一个我可以查看的最小工作示例?我无法重新创建您的场景=/(假设.config作为部署项是部署的一部分)@flindeberg嗯。。。显然我也不能。我现在试着用两个小时创建一个MWE,但不知何故,当我从头开始时,它就起作用了。这仍然是信息;这意味着除了我在这里列出的之外,一定还有其他原因导致了这个问题……奇怪的是,
noisolation
基本上控制着为测试实例创建单独的沙盒,但是可能需要创建单独的进程来为ms测试使用“动态”和非硬编码配置。