CefSharp 在运行 XUnit 测试时出现 FileNotFoundException。

3
我正在使用CefSharp编写一个应用程序进行XUnit测试。
但是测试出现了异常崩溃:
System.IO.FileNotFoundException: 无法加载文件或程序集“CefSharp,Version=55.0.0.0,Culture=neutral,PublicKeyToken=40c4b6fc221f4138”或其某个依赖项。系统找不到指定的文件。
在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控制台中都遇到了同样的问题。
编辑:
问题已解决(请参见答案)。除了使用SpecFlow创建的测试之外,所有测试都通过了。
这次它抛出了Could not load file or assembly,但这次是针对CefSharp.Core。

1
我不能分享代码库,那是我的公司代码。 我会尝试用最少的代码来重现这个问题。 - Gael
@robi-y 我添加了一个链接到一个重现该问题的存储库。 - Gael
它在我的电脑上运行 :-),VS Community 2017 - robi-y
1
CefSharp源代码包含一个xunit测试项目,您可以用它作为参考。 - amaitland
@robi-y 我更新了测试。在之前的版本中,发生了异常,但是测试忽略了它并成功通过了。只有在调试模式下才会看到异常。我现在更新了测试,所以它失败了。 - Gael
显示剩余3条评论
1个回答

3
问题在于CefSharp不支持多个AppDomains。 CefSharp仓库中的单元测试配置文件包含以下内容:
<configuration>
  <appSettings>
    <add key="xunit.appDomain" value="denied"/>
  </appSettings>
</configuration>

这会防止XUnit使用多个应用程序域。

必须在每个测试库的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");
}

检查是否使用了多个AppDomains。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接