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