【问题标题】:FileNotFoundException for CefSharp when running XUnit test运行 XUnit 测试时 CefSharp 的 FileNotFoundException
【发布时间】:2018-07-16 09:43:27
【问题描述】:

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

但测试正在崩溃,但有异常:

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

在 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。

【问题讨论】:

  • 你能分享你的项目/存储库吗?
  • 我无法共享存储库。这是我的公司代码。我将尝试使用重现问题所需的最少代码创建一个项目。
  • @robi-y 我添加了一个指向重现问题的存储库的链接
  • 它在我的机器上运行 :-),VS Community 2017
  • CefSharp 源码有一个 xunit 测试项目,你可以参考一下。

标签: c# cefsharp xunit.net


【解决方案1】:

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

<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。

【讨论】:

    猜你喜欢
    • 2018-09-21
    • 1970-01-01
    • 2017-03-26
    • 2019-11-18
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2018-01-12
    相关资源
    最近更新 更多