1

AnyCPU で「32 ビット優先」として配布されている .net 4.6.2 プロジェクトがあり、パッケージに x86 と x64 の両方のバージョンがある CefSharp を使用しています。

AnyCPU サポートを追加するための CefSharp プロジェクトの推奨事項 (オプション 1)に従って、次のことを行いました。

  1. 私の .csproj ファイルの最初に true を追加しました
  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);

デバッグではすべて正常に動作しますが、リリース バージョンをビルドしようとすると、詳細モードでエラーが発生します。

2>SGEN: エラー: ファイルまたはアセンブリ 'CefSharp.Core.dll' またはその依存関係の 1 つを読み込めませんでした。指定されたモジュールが見つかりませんでした。

さらに上には、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')" />

また、上記の 2 番目の x64 インポート行をコメントアウトしようとしましたが、役に立ちませんでした。

[更新] Fusion のログ記録をオンにしました ( SGEN エラーに関する Yavor Georgiev のブログ投稿によると)、それによると、dll は正常にロードされました。

4

1 に答える 1