运行 XUnit 测试时 CefSharp 的 FileNotFoundException

FileNotFoundException for CefSharp when running XUnit test

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

但测试正在崩溃,但出现以下异常:

System.IO.FileNotFoundException: Could not load file or assembly 'CefSharp, Version=55.0.0.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138'or one of its dependencies. The system cannot find the file specified.

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。

问题是 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。