WPF项目集成CefSharp后/obj目录下可执行文件无法启动的技术咨询
兄弟,我之前也碰到过一模一样的情况,其实核心原因特别直白:obj目录是编译过程的中间工作目录,CefSharp依赖的CEF运行时文件(比如libcef.dll、各类资源文件)并没有被完整复制到这里,而bin目录是项目的最终输出目录,安装CefSharp的NuGet包时,会自动把所有必需的依赖文件同步到bin目录里,所以bin下的exe能正常运行,obj里的就不行。
给你几个实用的解决办法:
直接切换到bin目录的exe进行调试
这是最省心的方案,右键你的项目→属性→调试,把“启动外部程序”的路径改成$(TargetDir)$(TargetFileName)(这是VS自带的宏,会自动指向bin目录下的最终生成exe),以后调试就会直接运行bin里的文件,彻底避开obj目录的问题。确认NuGet依赖的复制规则
打开你的项目文件(.csproj),检查是否存在类似下面的配置,确保CefSharp的依赖文件会被复制到输出目录:<ItemGroup> <Content Include="$(SolutionDir)\packages\cef.redist.x64.*\**\*.*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <Content Include="$(SolutionDir)\packages\cef.redist.x86.*\**\*.*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>正常安装CefSharp的NuGet包后这些配置会自动生成,但如果不小心被误删了,手动补回去就行。
Any CPU模式的额外校验
既然你已经按要求修改了Any CPU的配置,再确认下项目属性→生成→“首选32位”的勾选状态:如果你用的是x86版本的cef.redist,就勾选它;如果是x64版本,就取消勾选,保证运行时的架构和依赖文件完全匹配。
最后啰嗦一句:obj目录本来就是用来存放编译中间产物的,微软设计它的时候就没考虑让用户直接运行这里的exe,日常开发还是老老实实盯着bin目录就好啦。
内容的提问来源于stack exchange,提问作者Arodos

