2016-09-08 242 views

回答

5

首先,爲了使一切更容易,我建議向Visual Studios添加一個文件夾,並將所有必需的文件放在那裏。如果您在資源管理器中該文件夾,單擊「顯示所有文件」解決方案資源管理解決方案上面:

enter image description here

這右擊該文件夾(S)和文件(縣)要包括和選擇'包含在項目中'。

一定要包括所有需要的CefSharp文件 - more info on github
你應該用一個文件樹,看起來類似於這樣結束了:

enter image description here

一定要改變「複製到輸出Directy」來在所有文件的屬性下「始終複製」。

enter image description here

現在的代碼。你的解決方案應該有一個'App.config'文件(如果沒有,谷歌周圍,你會找到方法來產生一個)。

你要到一個新的assemblyBindingprobing元素添加進去(MSDN - probing
probing元素告訴它應該在其他文件夾圖書館的窗戶。因此,我們可以通過這種方式加載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等,但是您可以通過從主文件夾中刪除依賴關係來檢查構建是否成功(將資源文件夾)。

+1

非常有幫助的教程,謝謝。 然而,你錯過了'CefLibraryHandle'的定義,你(需要它的人)可以在這裏找到它: https:// github。COM/cefsharp/CefSharp /斑點/主/ CefSharp/CefLibraryHandle.cs – Jhollman

相關問題