将 CefSharp 依赖项放入特定目录

Placing CefSharp dependencies into a specific directory

提问人:Alpay 提问时间:12/10/2021 最后编辑:Alpay 更新时间:12/13/2021 访问量:552

问:

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

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

如何使用 cefsharp 96.0.142 实现这一点?

我已经试过了

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

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

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)中,我的应用程序从这个目录中使用它们。

C# .NET Cefsharp Chromium-Embedded

评论

0赞 amaitland 12/12/2021
探测 privatePath 仅适用于子文件夹/子文件夹。您究竟是如何尝试从 c:\chromium 加载的?您的代码是什么样的?
0赞 amaitland 12/12/2021
有关探测 privatePath 示例的信息,请参阅 github.com/cefsharp/CefSharp/discussions/3371
0赞 Alpay 12/13/2021
@amaitland我的意图不是从项目的子文件夹加载dll。我想将它们放在一个目录中,并使我的应用程序从该目录加载 dll。谢谢

答:

3赞 user2250152 12/13/2021 #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;
}

评论

0赞 Alpay 12/17/2021
它就像一个魅力。谢谢