CefSharp拥有许多运行所需的依赖项和库。构建文件夹杂乱无章。如何将所需的.dll和.pak依赖项移动到子文件夹?
答案 0 :(得分:9)
首先,为了让一切变得更轻松,我建议在Visual Studios中添加一个文件夹并将所有必需的文件放在那里。如果您在资源管理器中创建此文件夹,请单击解决方案资源管理器中解决方案上方的“显示所有文件”:
右键单击要包含的文件夹和文件,然后选择“包含在项目中”。
请务必包含所有必需的CefSharp文件 - more info on github
您最终应该得到一个与此类似的文件树:
请务必在所有文件的属性下将“复制到输出Directy”更改为“始终复制”。
现在代码。你的解决方案应该有一个'App.config'文件(如果没有,谷歌周围,你会找到生成一个的方法)。
您要向其添加新的assemblyBinding
和probing
元素(MSDN - probing)
probing
元素告诉Windows它应该在库的其他文件夹中查找。因此,我们可以通过这种方式为CefSharp加载所有必需的.dll。
示例App.config:
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="resources/cefsharp" />
</assemblyBinding>
</runtime>
</configuration>
注意:路径是相对于.exe文件的位置。
现在需要处理.dll文件,但我们现在需要更改CefSharp的设置,以便它知道在哪里查找.pak文件,以及语言环境和BrowserSubprocess.exe。
为此,我们将定义所有文件路径并手动将它们分配给CefSharp。
这是一个应该是什么样子的例子:
// File location variables
static string lib, browser, locales, res;
[STAThread]
static void Main()
{
// Assigning file paths to varialbles
lib = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"resources\cefsharp\libcef.dll");
browser = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"resources\cefsharp\CefSharp.BrowserSubprocess.exe");
locales = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"resources\cefsharp\locales\");
res = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"resources\cefsharp\");
var libraryLoader = new CefLibraryHandle(lib);
bool isValid = !libraryLoader.IsInvalid;
Console.WriteLine($"Library is valid: {isValid}");
LoadForm();
libraryLoader.Dispose();
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static void LoadForm()
{
var settings = new CefSettings();
settings.BrowserSubprocessPath = browser;
settings.LocalesDirPath = locales;
settings.ResourcesDirPath = res;
Cef.Initialize(settings, shutdownOnProcessExit: false, performDependencyCheck: false);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new CefWinForm());
}
所有这些都改编自:https://github.com/cefsharp/CefSharp/issues/601
最初的问题很难完全遵循并且正常工作所以我想我会分享知识,以防将来遇到类似的麻烦。
注意:Visual Studio仍会在输出目录中包含.dll,.pak,.xml等,但您可以通过删除主文件夹中的依赖项来检查构建是否成功(保留资源文件夹)