提问人:Alpay 提问时间:12/10/2021 最后编辑:Alpay 更新时间:12/13/2021 访问量:552
将 CefSharp 依赖项放入特定目录
Placing CefSharp dependencies into a specific directory
问:
我正在尝试创建一个使用 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)中,我的应用程序从这个目录中使用它们。
答:
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
它就像一个魅力。谢谢
评论