1

我正在使用 NuGet 管理 C# 项目的构建以获取 Common.Logging.Log4Net。从 Visual Studio 2010 运行时,单元测试全部通过,没有错误,但是当我使用 MSTest 从命令行运行时(因此当 TeamCity 执行相同操作时),当单元测试组织一个执行此操作的类时,我会失败:

private static readonly ILog Log = LogManager.GetCurrentClassLogger();

错误是:

测试方法 MyProject.Tests.Unit.BusinessDateBuilderTest.CreateElementalTest 抛出异常:System.TypeInitializationException:“MyProject.Common.Library”的类型初始化程序抛出异常。---> System.TypeInitializationException:'MyProject.Common.Initialization.Impl.InitializationLoaderImpl' 的类型初始化程序引发了异常。---> Common.Logging.ConfigurationException:无法从配置部分“common/logging”获取 Common.Logging 的配置。---> System.Configuration.ConfigurationErrorsException:为 common/logging 创建配置节处理程序时出错:无法创建类型“Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter,Common.Logging.Log4net”(C:\Subversion\Project\ MyProject.Tests。Unit\bin\Debug\TestResults\rac_DWM300619 2012-10-30 11_58_34\Out\MyProject.Tests.Unit.dll.config 第 168 行) ---> Common.Logging.ConfigurationException: 无法创建类型 'Common.Logging.Log4Net .Log4NetLoggerFactoryAdapter,Common.Logging.Log4net' ---> System.IO.FileNotFoundException:无法加载文件或程序集“Common.Logging.Log4net”或其依赖项之一。该系统找不到指定的文件。

我正在使用以下 NuGet 依赖项:

Common.Logging.2.1.1(DLL 版本为 2.1.1.0) Common.Logging.Log4Net.2.0.1(DLL 版本为 2.0.0.0) log4net.1.2.10(DLL 版本为 1.2.10)

我注意到 Common.Logging.Log4net.dll 没有复制到 testresults 输出文件夹 - 这是问题吗?如果是这样,我该如何解决这个问题?

4

1 回答 1

3

MSTest 有时会将程序集复制到新文件夹并从那里运行测试。问题是某些版本(所有版本?)对要复制的程序集使用某种静态分析。而且由于来自公共日志记录的 log4net 连接是非常动态的(使用公共日志记录的目的),因此永远不会复制程序集,因此会出现错误。
如果你想解决这个问题,你需要为 MSTest 创建一个 testsettings 文件(从 Visual Studio 内部)。然后将 deploymentItems (您缺少的程序集)添加到它。然后你需要将你的命令行指向它。在 teamcity 中,您在配置 MsTest 运行器时在“MSTest 运行配置文件”中执行此操作。

于 2012-12-17T12:50:46.623 回答