CefSharp.Core.dll не может быть найден во время сборки выпуска

У нас есть проект.net 4.6.2, который распространяется как "Prefer 32-bit" на AnyCPU и использует CefSharp, пакет которого имеет версии как x86, так и x64.

Следуя рекомендации (вариант 1) в проекте CefSharp добавить поддержку AnyCPU, я сделал следующее:

  1. Добавлена ​​истина к первому в моем.csproj файле
  2. В моем файле app.config добавлено следующее:
     <runtime>
         <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
             <probing privatePath="x86"/>
         </assemblyBinding>
     </runtime>
  1. Как уже отмечалось, все конфигурации моего проекта настроены на "Предпочитать 32-битные"
  2. Инициализированный 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 сейчас.

Другие вопросы по тегам