多年来成功使用 CefSharp.WinForms,由于以下运行时错误,我最近无法运行我的 WinForms .NET 4.8 应用程序:
System.BadImageFormatException
Die Datei oder Assembly "CefSharp.Core.Runtime, Version=94.4.50.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138" oder eine Abhängigkeit davon wurde nicht gefunden。Es wurde versucht, eine Datei mit einem falschen Format zu laden。
翻译成英文应该是这样的:
System.BadImageFormatException
无法加载文件或程序集“CefSharp.Core.Runtime,Version=94.4.50.0,Culture=neutral,PublicKeyToken=40c4b6fc221f4138”或其依赖项之一。尝试加载格式不正确的程序。
在成功使用 CefSharp 这么多年之后,这实际上是突然发生的。
我最近切换到 VS 2022 RC,但我不确定这是否是它的原因。
经过进一步调查,我发现“CefSharp.Core.Runtime.dll”的 x86 版本最终出现在我的“bin”文件夹和“bin\x86”文件夹中。
由于我的应用程序也支持 x64,因此在我的系统上运行为 64 位,它尝试从“bin”文件夹而不是“bin\x64”文件夹加载 x86“CefSharp.Core.Runtime.dll”。
两个文件夹“bin\x64”和“bin\x86”都包含它们各自正确版本的“CefSharp.Core.Runtime.dll”,但另外还有直接在其中的“CefSharp.Core.Runtime.dll”的x86版本“垃圾桶”。
当手动删除 bin 文件夹中的“CefSharp.Core.Runtime.dll”时,一切正常,我的应用程序运行正常。
AssemblyResolve
不会被触发,因为它仅在失败的解析中调用,并且由于“CefSharp.Core.Runtime.dll”直接存在于“bin”中,因此不会发生汇编解析方面的失败。
我也尝试卸载和安装 CefSharp NuGet 包,但仍然不妨碍构建过程将“CefSharp.Core.Runtime.dll”直接放入“bin”文件夹。
我确实怀疑 CefSharp 的某些构建脚本/目标是造成这种情况的原因,但不幸的是,我不太了解 MSBuild 以了解要查找的内容和位置。
我的问题
如何强制 CefSharp不将依赖位数的程序集放入“bin”,而仅放入“bin\x86”和“bin\x64”?
更新 1
我确实认为“CefSharp.Common.94.4.50\buildTransitive\CefSharp.Common.targets”中的某些内容对此负责,但同样,我不确定在哪里调整以及调整什么。