将 CefSharp 依赖项放入特定目录

Placing CefSharp dependencies into a specific directory

我正在尝试创建一个使用 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'

喜欢例外。看起来很容易想到,但我真的卡住了。

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

编辑#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)中,我的应用程序可以从该目录中使用它们。

您是否尝试使用 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;
}