在发布版本期间找不到CefSharp.Core.dll

时间:2018-03-21 23:38:28

标签: .net cefsharp sgen

我们有一个.net 4.6.2项目,分发为"首选32位"在AnyCPU上,正在使用其软件包同时具有x86和x64版本的CefSharp。

在CefSharp项目中添加recommendation (Option 1)以添加AnyCPU支持后,我执行了以下操作:

  1. 在我的.csproj文件中添加了第一个
  2. 在我的app.config文件中添加了以下内容:
  3.      <runtime>
             <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                 <probing privatePath="x86"/>
             </assemblyBinding>
         </runtime>
    
    1. 如前所述,我的所有项目配置都设置为&#34;首选32位&#34;
    2. 启动时初始化的Cef:
    3. var settings = new CefSettings();
      settings.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe";
      
      Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);
      

      所有在Debug中工作正常,但是当我尝试构建我的Release版本时,我得到一个错误 - 使用详细模式:

        

      2&gt; SGEN:错误:无法加载文件或程序集&#39; CefSharp.Core.dll&#39;   或其中一个依赖项。找不到指定的模块。

      进一步说,我可以看到它传递给以下对SGEN的引用:

        

      2 - ;参考=   2 - ; C:\ SVN \ MySolution \分行\ MyBranch \包\ CefSharp.Common.63.0.2 \建立.. \ CefSharp \ 86 \ CefSharp.Core.dll   2 - ; C:\ SVN \ MySolution \分行\ MyBranch \包\ CefSharp.Common.63.0.2 \建立.. \ CefSharp \ 86 \ CefSharp.dll   2 - ; C:\ SVN \ MySolution \分行\ MyBranch \包\ CefSharp.WinForms.63.0.2 \建立.. \ CefSharp \ 86 \ CefSharp.WinForms.dll

      似乎来自CefSharp.Common.props文件:

        <ItemGroup>
          <Reference Include="CefSharp">
            <HintPath>$(MSBuildThisFileDirectory)..\CefSharp\x86\CefSharp.dll</HintPath>
            <Private>False</Private>
          </Reference>
          <Reference Include="CefSharp.Core">
            <HintPath>$(MSBuildThisFileDirectory)..\CefSharp\x86\CefSharp.Core.dll</HintPath>
            <Private>False</Private>
          </Reference>
        </ItemGroup>
      

      或CefSharp.Common.targets文件:

      <ItemGroup>
        <CefSharpCommonBinaries32 Include="$(MSBuildThisFileDirectory)..\CefSharp\x86\*.*" />
        ...
      </ItemGroup>
      

      如果它是&#34; build ..&#34;部分文件名未被SGEN解析,我尝试了硬编码&#34; $(MSBuildThisFileDirectory)..&#34; (很多理由我不想真正做到这一点;但这是一个测试)但是得到了完全相同的问题,但是传递了正确的绝对路径作为对SGEN的引用:

        

      2 - ;参考=   2 - ; C:\ SVN \ MySolution \分行\ MyBranch \包\ CefSharp.Common.63.0.2 \ CefSharp \ 86 \ CefSharp.Core.dll   2 - ; C:\ SVN \ MySolution \分行\ MyBranch \包\ CefSharp.Common.63.0.2 \ CefSharp \ 86 \ CefSharp.dll   2 - ; C:\ SVN \ MySolution \分行\ MyBranch \包\ CefSharp.WinForms.63.0.2 \ CefSharp \ 86 \ CefSharp.WinForms.dll

      这让我忘记了为什么SGEN无法加载dll。所以,我目前的想法是,这是由于缺少依赖性。我应该期待这个引用列表中的libcef.dll吗?我将其他包添加到我的.csproj文件中:

      <Import Project="..\packages\cef.redist.x86.3.3239.1723\build\cef.redist.x86.props" Condition="Exists('..\packages\cef.redist.x86.3.3239.1723\build\cef.redist.x86.props')" />
      <Import Project="..\packages\cef.redist.x64.3.3239.1723\build\cef.redist.x64.props" Condition="Exists('..\packages\cef.redist.x64.3.3239.1723\build\cef.redist.x64.props')" />
      
       

      我也尝试过评论上面的第二个/ x64导入行,但无济于事。

      [更新]我刚刚开启了Fusion日志记录(as per Yavor Georgiev's blog post on SGEN errors)并根据该dll加载正常。

1 个答案:

答案 0 :(得分:0)

在我接管的旧版VB.Net WinForm项目中,我遇到了类似的问题。将旧的WebControl换成CefSharp后,我们可以在Debug模式下构建并运行,但是Release版本将失败。

我注意到生成错误中列出的文件是SGEN-XmlSerializationGenerator。

据我所知,没有对象需要XmlSerializtion,所以我去了“项目属性”>“编译”>“高级编译选项”,并将“生成序列化程序集:”从“自动”更改为“否”。

该解决方案现在可以在发布模式下构建并正常运行。