我在使用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。
答案 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。