运行XUnit测试时,CefSharp的FileNotFoundException

时间:2018-02-06 10:46:36

标签: c# cefsharp xunit.net

我在使用CefSarp的应用程序上使用XUnit进行一些测试。

但是测试正在崩溃,例外情况是:

  

System.IO.FileNotFoundException:无法加载文件或程序集'CefSharp,Version = 55.0.0.0,Culture = neutral,PublicKeyToken = 40c4b6fc221f4138'或其依赖项之一。系统找不到指定的文件。

     

at CefSharp.CefSharpApp.OnBeforeChildProcessLaunch(CefSharpApp *,CefRefPtr * commandLine)

在Xunit问题跟踪器(https://github.com/xunit/xunit/issues/4)上,解决方法是将shadowCopy选项设置为false。但这对我不起作用。

CefSharp有一些文件需要接下来是可执行文件(https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#Runtime_dependencies)。所有这些文件都存在于bin文件夹中,当我用System.IO.Directory.GetCurrentDirectory()检查当前目录时,这是正确的文件夹。

我尝试使用Kernel32中的SetDllDirectory来添加bin文件夹,但它什么都没改变。

我还尝试使用Assembly.LoadFile()手动加载程序集。此调用成功但稍后当cef初始化时,异常仍然发生。所以问题可能是找不到程序集本身,而是查找CefSharp所需的文件。

我应该在哪里放置所有CefSharp文件以允许XUnit找到它们?我在VisualStudio和Xunit控制台中集成了Xunit测试时遇到了同样的问题。

修改:

问题解决了(见anwser)。除了使用 SpecFlow 创建的测试外,所有测试都通过。

这次抛出Could not load file or assembly但是CefSharp.Core。

1 个答案:

答案 0 :(得分:2)

问题在于CefSharp不支持多个AppDomain。 CefSharp仓库中单元测试的配置文件包含以下内容:

<configuration>
  <appSettings>
    <add key="xunit.appDomain" value="denied"/>
  </appSettings>
</configuration>

阻止XUnit使用多个AppDomain。 必须在每个测试库的app.config中添加此配置。

CefSharp测试还包含

var isDefault = AppDomain.CurrentDomain.IsDefaultAppDomain();
if (!isDefault)
{
     throw new Exception(@"Add <add key=""xunit.appDomain"" value=""denied""/> to your app.config to disable appdomains");
}

要检查是否使用了多个AppDomain。