我正在尝试创建一个使用.net forms应用程序,该应用程序使用 cefsharp ,但所有cefsharp依赖项都将放在中,并从PC上的特定目录(例如C:\C)中使用。
我看到了一些条目,但几乎所有的条目都是古老的,并且使用了非常古老的cefsharp版本。
如何使用cefsharp 96.0.142实现这一目标?
我已经试过了
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="libs"/>
</assemblyBinding>
但是它没有起作用。我试图将C:\C目录放入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:\C目录中的CefSharp、CefSharp.Core、CefSharp.WinForms dll。我的意图是不从项目的子文件夹加载dll。相反,我想将dll放到一个通用目录(如C:\C)和我的应用程序中,以便从这个目录中使用它们。
发布于 2021-12-13 14:17:17
你试过使用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;
}
https://stackoverflow.com/questions/70304025
复制相似问题