我们有一个.net 4.6.2项目,分发为"首选32位"在AnyCPU上,正在使用其软件包同时具有x86和x64版本的CefSharp。
在CefSharp项目中添加recommendation (Option 1)以添加AnyCPU支持后,我执行了以下操作:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="x86"/>
</assemblyBinding>
</runtime>
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加载正常。
答案 0 :(得分:0)
在我接管的旧版VB.Net WinForm项目中,我遇到了类似的问题。将旧的WebControl换成CefSharp后,我们可以在Debug模式下构建并运行,但是Release版本将失败。
我注意到生成错误中列出的文件是SGEN-XmlSerializationGenerator。
据我所知,没有对象需要XmlSerializtion,所以我去了“项目属性”>“编译”>“高级编译选项”,并将“生成序列化程序集:”从“自动”更改为“否”。
该解决方案现在可以在发布模式下构建并正常运行。