将 CefSharp 依赖项放入特定目录

Posted

技术标签:

【中文标题】将 CefSharp 依赖项放入特定目录【英文标题】:Placing CefSharp dependencies into a specific directory 【发布时间】:2022-01-15 02:48:55 【问题描述】:

我正在尝试创建一个使用 cefsharp 的 .net forms 应用程序,但所有 cefsharp 依赖项都将放置并从特定目录使用 在 PC 上(假设是 C:\Chromium)

我看过一些条目,但几乎所有条目都是古老的,并且使用的是非常旧的 cefsharp 版本。

如何使用 cefsharp 96.0.142 实现这一目标?

我已经试过了

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <probing privatePath="libs"/>
</assemblyBinding>

但它不起作用。我试图将 C:\Chromium 目录放入 PATH 环境变量,但它也不起作用。我总是以

System.IO.FileNotFoundException: '无法加载文件或程序集'CefSharp.WinForms'

喜欢例外。这看起来很简单,但我真的被卡住了。

任何想法都会非常有帮助。提前致谢

EDIT#1 代码片段

this.chromiumComponent = new CefSharp.WinForms.ChromiumWebBrowser();
this.SuspendLayout();
// 
// chromiumComponent
// 
this.chromiumComponent.ActivateBrowserOnCreation = false;
this.chromiumComponent.Dock = System.Windows.Forms.DockStyle.Fill;
this.chromiumComponent.Location = new System.Drawing.Point(0, 0);
this.chromiumComponent.Name = "chromiumComponent";
this.chromiumComponent.Size = new System.Drawing.Size(800, 450);
this.chromiumComponent.TabIndex = 0;

我从 C:\Chromium 目录引用 CefSharp、CefSharp.Core、CefSharp.WinForms dll。我的意图不是从项目的子文件夹中加载 dll。而不是这样,我想将 dll 放到一个通用目录(如 C:\Chromium)和我的应用程序以从该目录中使用它们。

【问题讨论】:

探测 privatePath 仅适用于子/子文件夹。您究竟是如何尝试从 c:\chromium 加载的?你的代码是什么样的? 查看 github.com/cefsharp/CefSharp/discussions/3371 以了解探索 privatePath 示例 @amaitland 我的意图不是从项目的子文件夹中加载 dll。我想将它们放在一个目录中,并让我的应用程序从该目录加载 dll。谢谢 【参考方案1】:

您是否尝试使用AppDomain.AssemblyResolve 事件?如果应用程序输出文件夹中缺少某些程序集,则会发生AssemblyResolve 事件,您可以从其他文件夹加载程序集。

[STAThread]
static void Main()

    AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
    ...


private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)

    var requestedName = new AssemblyName(args.Name);
    var chromiumDirectory = @"C:\\C:\Chromium";
    var assemblyFilename = Path.Combine(chromiumDirectory, requestedName.Name + ".dll");
    if (File.Exists(assemblyFilename))
    
        return Assembly.LoadFrom(assemblyFilename);
    
    return null;

【讨论】:

它就像一个魅力......谢谢

以上是关于将 CefSharp 依赖项放入特定目录的主要内容,如果未能解决你的问题,请参考以下文章

无法加载文件或程序集“CefSharp.dll”或其依赖项之一

未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项

win 8系统:System.IO.FileNotFoundException: 未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项。找不到指定的模块

在特定执行阶段忽略 Maven 依赖

为不同的输出目录生成 GCC 依赖项

CefSharp For WPF基本使用