2017-10-09 178 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