CefSharp.Core.dll не может быть найден во время сборки выпуска
У нас есть проект.net 4.6.2, который распространяется как "Prefer 32-bit" на AnyCPU и использует CefSharp, пакет которого имеет версии как x86, так и x64.
Следуя рекомендации (вариант 1) в проекте CefSharp добавить поддержку AnyCPU, я сделал следующее:
- Добавлена истина к первому в моем.csproj файле
- В моем файле app.config добавлено следующее:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="x86"/>
</assemblyBinding>
</runtime>
- Как уже отмечалось, все конфигурации моего проекта настроены на "Предпочитать 32-битные"
- Инициализированный Cef при запуске с:
var settings = new CefSettings();
settings.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe";
Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);
Все отлично работает в Debug, но когда я пытаюсь собрать свою версию Release, я получаю сообщение об ошибке - в подробном режиме:
2> SGEN: ошибка: не удалось загрузить файл или сборку 'CefSharp.Core.dll' или одну из ее зависимостей. Указанный модуль не может быть найден.
И далее я вижу, что он передает следующие ссылки на SGEN:
2> Ссылки = 2>C:\SVN\MySolution\Branches\MyBranch\packages\CefSharp.Common.63.0.2\build..\CefSharp\x86\CefSharp.Core.dll 2>C:\SVN\MySolution\Branches\MyBranch\packages\CefSharp.Common.63.0.2\build..\CefSharp\x86\CefSharp.dll 2>C:\SVN\MySolution\Branches\MyBranch\packages\CefSharp.WinForms.63.0.2\build..\CefSharp\x86\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>
В случае, если это была часть "build.." имен файлов, которые не были разрешены SGEN, я попытался жестко запрограммировать "$(MSBuildThisFileDirectory).." (много причин, по которым я не хотел бы делать это по-настоящему; но это был тест), но он получил точно такую же проблему, но с правильными абсолютными путями, переданными как ссылки на SGEN:
2> Ссылки = 2>C:\SVN\MySolution\Branches\MyBranch\packages\CefSharp.Common.63.0.2\CefSharp\x86\CefSharp.Core.dll 2>C:\SVN\MySolution\Branches\MyBranch\packages\CefSharp.Common.63.0.2\CefSharp\x86\CefSharp.dll 2>C:\SVN\MySolution\Branches\MyBranch\packages\CefSharp.WinForms.63.0.2\CefSharp\x86\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 ( согласно сообщению в блоге Явора Георгиева об ошибках SGEN) и, согласно этому, dll загружена нормально.
0 ответов
У меня была похожая проблема в старом проекте VB.Net WinForm, который я взял на себя. После замены старого WebControl для CefSharp, мы могли бы прекрасно работать и работать в режиме отладки, но сборка Release не удалась.
Я заметил, что Файл, указанный в ошибке сборки, был SGEN - XmlSerializationGenerator.
Насколько я мог судить, не было объектов, для которых требовался XmlSerializtion, поэтому я пошел в Свойства проекта> Компиляция> Дополнительные параметры компиляции и изменил "Создать сборки сериализации:" с Авто на Нет.
Решение собирается и работает очень хорошо в режиме Release сейчас.