Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法加载文件或程序集';x64和x86的CefSharp.Wpf;只有一个有效_C#_Wpf_Cefsharp - Fatal编程技术网

C# 无法加载文件或程序集';x64和x86的CefSharp.Wpf;只有一个有效

C# 无法加载文件或程序集';x64和x86的CefSharp.Wpf;只有一个有效,c#,wpf,cefsharp,C#,Wpf,Cefsharp,运行时,我得到:无法加载文件或程序集“CefSharp.Wpf,Version=41.0.0.0,Culture=neutral,PublicKeyToken=40c4b6fc221f4138”或其依赖项之一。试图加载格式不正确的程序。 这意味着问题是由于DLL的位不正确造成的 在版本41.0.0中,nuget包向x86版本添加指向正确路径(x86文件夹)的dll引用。在“属性”面板中还有指向空路径的DLL的另一个副本。问题是x64版本由于错误的映像错误而崩溃,因为它引用的是x86版本的DLL

运行时,我得到:
无法加载文件或程序集“CefSharp.Wpf,Version=41.0.0.0,Culture=neutral,PublicKeyToken=40c4b6fc221f4138”或其依赖项之一。试图加载格式不正确的程序。

这意味着问题是由于DLL的位不正确造成的

在版本41.0.0中,nuget包向x86版本添加指向正确路径(x86文件夹)的dll引用。在“属性”面板中还有指向空路径的DLL的另一个副本。问题是x64版本由于错误的映像错误而崩溃,因为它引用的是x86版本的DLL

我已经回到了39.0.2版本,CefSharp对我很有用。我有两套DLL,其中x86和x64版本的应用程序按预期编译和运行

当我再次升级到41.0.0时,问题与以前相同。虽然应用程序使用x86版本的dll,但x64版本将进行编译,该dll在尝试显示第一个浏览器时崩溃。我尝试重新生成所有DLL,并删除自动复制的DLL,在编译过程中,x86版本会再次复制。(至少我认为情况是这样的

然后,我删除了引用中的所有DLL,并手动添加了x64版本。编译和执行工作与39.02版本的CefSharp.WPF一样正常

如何在不必手动更改dll路径的情况下使两个版本都工作


另一个注意事项:我可以在设置为x64时使用nuget,这与上述问题正好相反。现在x64工作,x86不工作。DLL的路径现在是x64文件夹。

经过许多磨难和痛苦之后,我发现在我的
.csproj
中没有正确设置引用。它们被定义为x64 som哎哟

<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>

这些
.props
文件设置了实际的
HintPath
,这是它将正确的
.dll
复制到构建文件夹所必需的。我不确定我的项目如何以错误设置的路径结束。

使用Visual studio 2017,winforms应用程序,我在升级Nuget pa后遇到了错误在一台机器上上传到Github,然后在另一台机器上,我执行了git a Pull来更新我的解决方案文件。在第二台机器上导致了上述错误

补救措施: 删除/bin和/obj中的文件夹。
重建解决方案。

该问题是否可以在项目中重现?在
39.0.2
41.0.0
之间,没有对
Nuget
包结构进行任何更改,就
CefSharp
而言,这确实是一个非常小的升级(显然是对新
CEF
版本的重大升级)。我将查看该项目是否会发生这种情况。虽然我可能要到周一才能开始。如果在编译完成后手动复制文件,则生成将正确执行和运行。生成似乎复制了错误版本的文件(总是复制x86版本)。我可以在何处查找此内容?复制是由msbuild目标执行的。您向我指出了有助于查找引用问题的项目文件。谢谢@amaitland。相对较旧的版本存在一个问题,这意味着nuget没有引入正确的引用(尤其是在未首先选择“位”解决方案时)。
<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')" />