无法为 x64 和 x86 加载文件或程序集 'CefSharp.Wpf;只有一个作品
Could not load file or assembly 'CefSharp.Wpf for both x64 and x86; only one works
当我 运行 我得到:Could not load file or assembly 'CefSharp.Wpf, Version=41.0.0.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138' or one of its dependencies. An attempt was made to load a program with an incorrect format.
这意味着问题是由于 dll 的位数不正确。
在版本 41.0.0 中,nuget 包添加了指向正确路径(x86 文件夹)的 x86 版本的 dll 引用。还有另一个 dll 副本指向属性面板中的空路径。问题是 x64 版本崩溃并出现错误图像错误,因为它引用了 dll 的 x86 版本。
我已经回溯到 39.0.2,CefSharp 对我有用。我有两组 dll,我的应用程序的 x86 和 x64 版本按预期编译和 运行。
当我再次升级到 41.0.0 时出现与以前相同的问题。 x64 版本将通过应用程序使用 x86 版本的 dll 进行编译,该 dll 在尝试显示第一个浏览器时会崩溃。我尝试重建所有内容并删除自动复制的 dll,并且在编译期间再次复制 x86 版本。 (至少我相信是这样a
然后我删除了引用中的所有 dll 并手动添加了 x64 版本。编译和执行工作正常,与 39.02 版本的 CefSharp.WPF 一样。
如何在不手动更改 dll 路径的情况下让两个版本都工作?
另一个注意事项:我可以在设置为 x64 时使用 nuget,这与上述问题相反。现在 x64 工作而 x86 不工作。 dll 的路径现在是 x64 文件夹。
事实证明,在经历了很多磨难和痛苦之后,我发现我的 .csproj
中的引用设置不正确。它们以某种方式被定义为 x64。
<Reference Include="CefSharp, Version=41.0.0.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=AMD64">
<SpecificVersion>False</SpecificVersion>
<!--<HintPath>..\packages\CefSharp.Common.41.0.0\CefSharp\x64\CefSharp.dll</HintPath>-->
</Reference>
<Reference Include="CefSharp.Core, Version=41.0.0.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=AMD64">
<SpecificVersion>False</SpecificVersion>
<!--<HintPath>..\packages\CefSharp.Common.41.0.0\CefSharp\x64\CefSharp.Core.dll</HintPath>-->
</Reference>
<Reference Include="CefSharp.Wpf, Version=41.0.0.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<!--<HintPath>..\packages\CefSharp.Wpf.41.0.0\CefSharp\x64\CefSharp.Wpf.dll</HintPath>-->
</Reference>
我一注释掉 HintPath
,它就开始正常工作了。请注意,实际引用由项目顶部的 Import
定义。
<Import Project="..\packages\CefSharp.Wpf.41.0.0\build\CefSharp.Wpf.props" Condition="Exists('..\packages\CefSharp.Wpf.41.0.0\build\CefSharp.Wpf.props')" />
<Import Project="..\packages\CefSharp.Common.41.0.0\build\CefSharp.Common.props" Condition="Exists('..\packages\CefSharp.Common.41.0.0\build\CefSharp.Common.props')" />
这些 .props
文件设置了将正确的 .dlls
复制到构建文件夹所必需的实际 HintPath
。我不确定我的项目是如何以错误的路径设置结束的。
使用Visual studio2017,winforms应用,在一台机器上升级Nuget包,上传到Github后遇到错误,然后在另一台机器上执行git a 拉动以在那里更新我的解决方案文件。在第二台机器上导致上述错误。
补救措施:
删除 /bin 和 /obj 中的文件夹。
重建解决方案。
当我 运行 我得到:Could not load file or assembly 'CefSharp.Wpf, Version=41.0.0.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138' or one of its dependencies. An attempt was made to load a program with an incorrect format.
这意味着问题是由于 dll 的位数不正确。
在版本 41.0.0 中,nuget 包添加了指向正确路径(x86 文件夹)的 x86 版本的 dll 引用。还有另一个 dll 副本指向属性面板中的空路径。问题是 x64 版本崩溃并出现错误图像错误,因为它引用了 dll 的 x86 版本。
我已经回溯到 39.0.2,CefSharp 对我有用。我有两组 dll,我的应用程序的 x86 和 x64 版本按预期编译和 运行。
当我再次升级到 41.0.0 时出现与以前相同的问题。 x64 版本将通过应用程序使用 x86 版本的 dll 进行编译,该 dll 在尝试显示第一个浏览器时会崩溃。我尝试重建所有内容并删除自动复制的 dll,并且在编译期间再次复制 x86 版本。 (至少我相信是这样a
然后我删除了引用中的所有 dll 并手动添加了 x64 版本。编译和执行工作正常,与 39.02 版本的 CefSharp.WPF 一样。
如何在不手动更改 dll 路径的情况下让两个版本都工作?
另一个注意事项:我可以在设置为 x64 时使用 nuget,这与上述问题相反。现在 x64 工作而 x86 不工作。 dll 的路径现在是 x64 文件夹。
事实证明,在经历了很多磨难和痛苦之后,我发现我的 .csproj
中的引用设置不正确。它们以某种方式被定义为 x64。
<Reference Include="CefSharp, Version=41.0.0.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=AMD64">
<SpecificVersion>False</SpecificVersion>
<!--<HintPath>..\packages\CefSharp.Common.41.0.0\CefSharp\x64\CefSharp.dll</HintPath>-->
</Reference>
<Reference Include="CefSharp.Core, Version=41.0.0.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=AMD64">
<SpecificVersion>False</SpecificVersion>
<!--<HintPath>..\packages\CefSharp.Common.41.0.0\CefSharp\x64\CefSharp.Core.dll</HintPath>-->
</Reference>
<Reference Include="CefSharp.Wpf, Version=41.0.0.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<!--<HintPath>..\packages\CefSharp.Wpf.41.0.0\CefSharp\x64\CefSharp.Wpf.dll</HintPath>-->
</Reference>
我一注释掉 HintPath
,它就开始正常工作了。请注意,实际引用由项目顶部的 Import
定义。
<Import Project="..\packages\CefSharp.Wpf.41.0.0\build\CefSharp.Wpf.props" Condition="Exists('..\packages\CefSharp.Wpf.41.0.0\build\CefSharp.Wpf.props')" />
<Import Project="..\packages\CefSharp.Common.41.0.0\build\CefSharp.Common.props" Condition="Exists('..\packages\CefSharp.Common.41.0.0\build\CefSharp.Common.props')" />
这些 .props
文件设置了将正确的 .dlls
复制到构建文件夹所必需的实际 HintPath
。我不确定我的项目是如何以错误的路径设置结束的。
使用Visual studio2017,winforms应用,在一台机器上升级Nuget包,上传到Github后遇到错误,然后在另一台机器上执行git a 拉动以在那里更新我的解决方案文件。在第二台机器上导致上述错误。
补救措施: 删除 /bin 和 /obj 中的文件夹。 重建解决方案。