CefSharp.Core.Runtime.dll出现在bin根目录引发BadImageFormatException如何解决
CefSharp 冗余运行时文件输出问题修复方案
前置校验
- 首先确认项目已禁用
Any CPU生成配置,CefSharp 原生不支持 Any CPU 架构,必须分别配置独立的 x86、x64 生成平台,不要开启「首选32位」选项。
方案1:覆盖NuGet构建逻辑(推荐,不会随包更新丢失)
在你的 .csproj 项目文件末尾,</Project> 标签之前插入以下 MSBuild 配置,覆盖 CefSharp 默认的文件复制逻辑:
<Target Name="CefSharpCopyRuntimeDependencies" AfterTargets="AfterBuild"> <!-- 仅将对应架构文件输出到子目录,禁用根目录输出 --> <ItemGroup> <CefSharpRuntimeFilesX86 Include="$(CefSharpCommonRootPath)x86\**\*.*" /> <CefSharpRuntimeFilesX64 Include="$(CefSharpCommonRootPath)x64\**\*.*" /> </ItemGroup> <Copy SourceFiles="@(CefSharpRuntimeFilesX86)" DestinationFolder="$(OutputPath)x86\%(RecursiveDir)" SkipUnchangedFiles="True" /> <Copy SourceFiles="@(CefSharpRuntimeFilesX64)" DestinationFolder="$(OutputPath)x64\%(RecursiveDir)" SkipUnchangedFiles="True" /> </Target>
方案2:修改全局Targets文件(不推荐,包更新后会被覆盖)
找到你本地NuGet缓存中的CefSharp.Common.94.4.50\buildTransitive\CefSharp.Common.targets文件,删除所有将CefSharp.Core.Runtime.dll直接复制到$(OutputPath)根目录的逻辑,仅保留输出到x86、x64子目录的分支即可。
兜底方案:添加构建后事件自动清理
如果上述配置仍有遗漏,可以在项目生成事件的「生成后事件命令行」中添加以下命令,构建完成后自动删除根目录的冗余文件:
del "$(TargetDir)CefSharp.Core.Runtime.dll" /f /q
验证步骤
重新生成解决方案后检查bin目录:
- 根目录无
CefSharp.Core.Runtime.dll文件 bin\x86、bin\x64目录下各存在对应架构的CefSharp.Core.Runtime.dll
分别运行x86、x64版本的程序,确认System.BadImageFormatException异常不再抛出。
注意:如果你使用的是支持多架构打包的发布逻辑,需要同步调整发布阶段的文件筛选规则,避免打包时把冗余文件带入发布包。
内容的提问来源于stack exchange,提问作者Uwe Keim
相关产品推荐
相关产品推荐

