2017-10-09 93 views
0

我目前正在嘗試編寫一個小服務,它使用CefSharp(v57.0.0)將HTML呈現爲PDF文件,並按照說明在我的項目中使用「任何CPU」 Feature Request - Add AnyCPU Support)。 在我的項目我用下面的程序集解析器,似乎工作罰款(它初始化時加載CefSharp.Core.dll,CefSharp.dll):CefSharp NuGet包,AnyCPU找不到文件

// Will attempt to load missing assembly from either x86 or x64 subdir 
    private static Assembly Resolver(object sender, ResolveEventArgs args) 
    { 
     if (args.Name.StartsWith("CefSharp", StringComparison.Ordinal)) 
     { 
      string assemblyName = args.Name.Split(new[] { ',' }, 2)[0] + ".dll"; 
      string archSpecificPath = Path.Combine(
       AppDomain.CurrentDomain.SetupInformation.ApplicationBase, 
       Environment.Is64BitProcess ? "x64" : "x86", 
       assemblyName); 

      var outputAssembly = File.Exists(archSpecificPath) ? Assembly.LoadFile(archSpecificPath) : null; 

      return outputAssembly; 
     } 

     return null; 
    } 

對於CefSharp的初始化我設置完全一樣的相同的值在例如:

var settings = new CefSettings() 
     { 
      // By default CefSharp will use an in-memory cache, you need to specify a Cache Folder to persist data 
      CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharp\\Cache") 
     }; 

     // Perform dependency check to make sure all relevant resources are in our output directory. 
     Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null); 

但是,如果我開始我的簡單的測試,我得到以下錯誤代碼:

Message: System.Exception : Unable to locate required Cef/CefSharp dependencies: 
Missing:CefSharp.BrowserSubprocess.exe 
Missing:CefSharp.BrowserSubprocess.Core.dll 
Missing:CefSharp.Core.dll 
Missing:CefSharp.dll 
Missing:icudtl.dat 
Missing:libcef.dll 
Executing Assembly Path:D:\projects\CefService\bin\Debug\x86 

任何想法可能是什麼Happe的寧在這裏以及如何解決這個問題?

+0

小更新:我已經改變了我的項目中使用「86」或「64」的目標,現在(像上面鏈接的描述),如果我這工作從主程序調用轉換方法。 但是,如果我從NUnit調用它,程序將崩潰。 – Octoate

+0

另一個更新:在與CefSharp玩了兩天後,我們決定跳過它並使用商業工具。它在箱子外面運作,我在不到一個小時內就可以實現所需的功能。 – Octoate

回答

1

該消息非常清晰,其他程序集無法加載。

下面是關於如何做一些通用的指令:

  • 負載本土的人(如libcef.dll)先用LoadLibraryFreeLibrary
  • 看是否加載管理的一個會自動加載其他管理那些它依賴,否則處理它們(乏味)

你可能有興趣在這些工具爲察覺的依賴關係:

+0

感謝您的回答。不幸的是,這並不能幫助我解決問題,因爲我以支持「任何CPU」的方式設置項目,並且它應該加載這些依賴關係,而無需進一步的操作。但是,我無法使用「任何CPU」支持從CefSharp示例創建「最小示例」。 – Octoate

+1

我已經制定了如何使託管的AnyCPU加載由32位和64位二進制文​​件構成的本機依賴關係,另一方面,如果CefSharp有一個工作「方式」,我寧願嘗試使其工作。 – Aybe

+0

這就是我想要的。但是,我目前還面臨着PrintToPdfAsync方法(Task.Wait()將導致應用程序卡住)的回調方法的問題,我想使用它。我調試到它並可以看到結果不會被解僱。所以我目前不確定是否應該繼續研究這個解決方案或尋找替代方案。 – Octoate